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

Posted

技术标签:

【中文标题】在 C++ 中的类中创建类对象的动态数组【英文标题】:Create a dynamic array of class objects inside a class in C++ 【发布时间】:2016-12-06 19:27:37 【问题描述】:

我时遇到问题。概念是:假设我们有一个类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;

提前谢谢你。

【问题讨论】:

使用std::vector句号! 感谢您的回答。Vectors 是最好的实现,但这是一个我不允许使用它们的项目。 std::vector 不能解决无限递归问题。你在哪里停止嵌套? @Vkt678 真可惜(愚蠢的限制)。然后我会建议研究std::vector 的可用实现并在此基础上模仿你自己的实现。 那么为什么class A 包含自身的实例?也许您需要将容器的概念与对象分开。 【参考方案1】:

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

type * name = new type[size];

所以你会这样做

A * arr = new A[k];

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

编辑:您的程序也加载了内存泄漏。向量会自动处理这些问题,但每次使用 new 创建数组时,都必须使用

删除该数组
delete [] name;

【讨论】:

以上是关于在 C++ 中的类中创建类对象的动态数组的主要内容,如果未能解决你的问题,请参考以下文章

请问,C++中的类的对象组成的动态数组怎么用sort()或qsort()排序?

在层次结构中创建类的指针数组

在 Swift 4 中创建类的非零属性数组

在 C++ 中动态调整数组的大小

在C ++中创建和使用动态数组

如何在C++中创建一维动态数组