我在使用C ++在类中创建动态数组类对象时遇到了麻烦。这个概念是:假设我们有一个A类。在这个类中,我希望有一个具有相同类型的对象数组(例如A *数组),其内存将动态分配(我们不知道开头时这个数组的大小)。在main()
我想创建一个包含2个对象的数组。第一个将有一个包含3个A类元素的数组,第二个对象包含6个元素。因此,每个对象都有自己的数组。以下是我的想法:
基本概念:
|_|_|_| //Array with 3 elements of class A in object A
| _____ |_|_|_|_|_|_| //Array with 6 elements of class A in object B
| |
|A||B| //Basic array with 2 elements
class A {
A* array;
public:
A(int k) {
//array = new A[k]; //this doesn't work because it calls the default constructor.
int i;
for (i = 0; i < k; i++)
array = new A(k); //This doesn't work either.
cout << "A created." << endl;
};
~A() {
cout << "Destroying A!" << endl;
}
};
int main() {
A *ar[2];
for (i = 0; i < 2; i++) {
if(i == 0) {
ar[i] = new A(3);
} else {
ar[i] = new A(6);
}
}
return 0;
}
提前谢谢。
答案 0 :(得分:1)
你应该使用std :: vector,但如果必须使用数组,动态声明一个的语法是
type * name = new type[size];
所以你会这样做
A * arr = new A[k];
大小将是您拥有的变量,并且您必须通过创建自己的grow()函数来每次需要增长时调整数组大小,这是一个巨大的痛苦。只需使用矢量!
编辑:你的程序也会在内存泄漏时加载。向量会自动进行这些操作,但每次使用new创建数组时,都必须使用
删除该数组delete [] name;