在 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++ 中的类中创建类对象的动态数组的主要内容,如果未能解决你的问题,请参考以下文章