動態分配物件陣列
使用包含動態分配陣列的物件時,建立這些物件的整個陣列可能會帶來挑戰。使用像這樣的簡單方法:
A* arrayOfAs = new A[5]; for (int i = 0; i < 5; ++i) { arrayOfAs[i] = A(3); }
會導致記憶體問題,因為循環中破壞的 A 物件會刪除其內部 myArray 數組,從而使 arrayOfAs 的數組元素無效。
要避免這些問題問題,理解「4 規則」(或 C 11 中擴展的「5 規則」)對於包含 raw的類別至關重要指標:
如果沒有定義,編譯器會產生這些方法自己的版本,可能不適合原始指標。
要解決上述錯誤,最低要求為包含指向數組的指針的類包括:
class A { size_t mSize; int* mArray; public: A(size_t s = 0) {mSize=s;mArray = new int[mSize];} ~A() {delete [] mArray;} A(A const& copy) { mSize = copy.mSize; mArray = new int[copy.mSize]; // Handle copying of integers/other members } A& operator=(A other) { std::swap(mArray, other.mArray); std::swap(mSize, other.mSize); return *this; } };
或者,使用std::vector 等標準容器可以簡化過程,因為它們處理內存自動管理:
class A { std::vector<int> mArray; public: A(){} A(size_t s) :mArray(s) {} };
以上是在 C 中動態分配物件數組時如何避免記憶體問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!