在C ++中的类中创建一个动态的类对象数组

时间:2016-12-06 19:27:37

标签: c++ arrays dynamic dynamic-memory-allocation

我在使用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;
}

提前谢谢。

1 个答案:

答案 0 :(得分:1)

你应该使用std :: vector,但如果必须使用数组,动态声明一个的语法是

type * name = new type[size];

所以你会这样做

A * arr = new A[k];

大小将是您拥有的变量,并且您必须通过创建自己的grow()函数来每次需要增长时调整数组大小,这是一个巨大的痛苦。只需使用矢量!

编辑:你的程序也会在内存泄漏时加载。向量会自动进行这些操作,但每次使用new创建数组时,都必须使用

删除该数组
delete [] name;