動態大小的原始陣列

// Example of raw dynamic size array. It's generally better to use std::vector.
#include <algorithm>            // std::sort
#include <iostream>
using namespace std;

auto int_from( istream& in ) -> int { int x; in >> x; return x; }

auto main()
    -> int
{
    cout << "Sorting n integers provided by you.\n";
    cout << "n? ";
    int const   n   = int_from( cin );
    int*        a   = new int[n];       // ← Allocation of array of n items.
    
    for( int i = 1; i <= n; ++i )
    {
        cout << "The #" << i << " number, please: ";
        a[i-1] = int_from( cin );
    }

    sort( a, a + n );
    for( int i = 0; i < n; ++i ) { cout << a[i] << ' '; }
    cout << '\n';
    
    delete[] a;
}

宣告陣列 T a[n]; 的程式,其中 n 被確定為執行時,可以使用支援 C99 可變長度陣列 (VLA)作為語言擴充套件的某些編譯器進行編譯。但標準 C++不支援 VLA。此示例顯示如何通過 new[]-expression 手動分配動態大小陣列,

int*        a   = new int[n];       // ← Allocation of array of n items.

…然後使用它,最後通過 delete[]-expression 釋放它:

delete[] a;

這裡分配的陣列具有不確定的值,但只需新增一個空括號 () 即可進行零初始化,如下所示:new int[n]()。更一般地,對於任意項型別,這執行值初始化

作為呼叫層次結構中函式的一部分,此程式碼不會是異常安全的,因為 delete[] 表示式之前(以及 new[] 之後)的異常會導致記憶體洩漏。解決該問題的一種方法是通過例如 std::unique_ptr 智慧指標自動化清理。但通常更好的解決方法就是使用 std::vector:這就是 std::vector 的用途。