动态分配对象数组
使用包含动态分配数组的对象时,创建这些对象的整个数组可能会带来挑战。使用像这样的简单方法:
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中文网其他相关文章!