我有一个包含动态分配数组的类,比如说
class A
{
int* myArray;
A()
{
myArray = 0;
}
A(int size)
{
myArray = new int[size];
}
~A()
{
// Note that as per MikeB's helpful style critique, no need to check against 0.
delete [] myArray;
}
}
现在我想创建一个动态分配的这些类的数组。这是我的当前代码:
A* arrayOfAs = new A[5];
for (int i = 0; i < 5; ++i)
{
arrayOfAs[i] = A(3);
}
但这个实现非常糟糕。因为使用A(3)
调用创建的新A
对象在for
循环迭代完成时被析构,这意味着该A
实例的内部myArray
会被delete[]。所以我认为我的语法肯定非常错误了?我想有一些修复方法似乎过于复杂,希望能够避免:
- 为
A
创建一个拷贝构造函数。 - 使用
vector<int>
和vector<A>
,这样就不必担心这些问题。 - 将
arrayOfAs
作为A*
指针数组,而不是A
对象数组。
我认为这只是一些初学者的问题,当尝试动态分配具有内部动态分配的数组时,其语法实际上是有效的。
(另外,由于我已经有一段时间没有写C++了,因此也欢迎对代码风格进行批评。)
未来的读者更新:下面的所有答案都非常有帮助。Martin的答案因为示例代码和有用的“四法则”而被接受,但我真的建议阅读它们。一些是关于问题的好而简洁的陈述,一些正确地指出了为什么vector
是一个好方法。