为了账号安全,请及时绑定邮箱和手机立即绑定

动态分配对象数组

动态分配对象数组

C++
一只斗牛犬 2019-07-10 10:45:19
动态分配对象数组这是一个初学者的问题,但我已经很长时间没有做C+了,下面是.我有一个类,它包含一个动态分配的数组,比如说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对象创建(使用A(3)(调用)在for循环迭代完成,这意味着内部myArray其中A实例获取delete []-艾德所以我觉得我的语法肯定错了?我想有几个修复方法看起来有点过火,我希望避免:创建副本构造函数A.使用vector<int>和vector<A>所以我不用担心这些。而不是arrayOfAs是一个数组A对象,它是否是A*指南针。我认为这只是一些初学者的事情,在尝试动态分配具有内部动态分配的事物时,语法实际上是有效的。(还有,风格批评很受欢迎,因为我做C+已经有一段时间了。)为未来观众提供最新信息:下面的所有答案都很有帮助。因为示例代码和有用的“规则4”,Martin的代码被接受了,但我确实建议阅读它们。一些是好的,简洁的陈述什么是错误的,还有一些正确地指出了如何和为什么vector这是个很好的方法。
查看完整描述

3 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

我建议使用std:载体:类似于

typedef std::vector<int> A;typedef std::vector<A> AS;

STL的轻微过度没有什么问题,你可以花更多的时间来实现你的应用程序的特定功能,而不是重新发明自行车。


查看完整回答
反对 回复 2019-07-10
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

A对象的构造函数动态分配另一个对象,并将指向该动态分配对象的指针存储在原始指针中。

在这种情况下,你定义您自己的复制构造函数、赋值运算符和析构函数。生成的编译器将不能正常工作。(这是“三大定律”的必然结果:具有任意析构函数、赋值运算符、复制构造函数的类通常需要全部3)。

您已经定义了自己的析构函数(并且提到了创建副本构造函数),但是您需要定义三大构造函数中的另外两个。

另一种方法是存储指向动态分配的指针。int[]会帮你处理这些事情。有点像vector<int>(如你所述)或boost::shared_array<>.

要将其归结为-为了最大限度地利用Raii,您应该尽可能避免处理原始指针。

由于您要求其他样式的批判性,次要的是当您删除原始指针时,您不需要在调用之前检查0。deletedelete通过不做任何操作来处理这种情况,这样您就不必将代码与检查混淆。


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 643 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信