c语言数组加入成员,C中的数组类成员初始化

我有以下代码片段:

#include

using namespace std;

class A {

int* data;

int size;

public:

A(int s):size(s)

{

data = new int[size];

}

A() {

data = nullptr;

}

~A() {

if (data) delete [] data;

}

};

class B {

A a[2];

public:

B() {

a[0] = A(10);

a[1] = A(11);

}

};

int main(int argc, char *argv[]) {

B b;

}

在上面的C代码中,我有一个类A,它有一个数组成员int * data,而(de)内存的分配由(de)构造函数处理.我创建了B类,它有一个固定长度的A类数组作为数据成员.

我的问题是:如何优雅地初始化成员A a [2]?在上面的代码中,A(10)和A(11)是在堆栈上创建的,当跳出作用域时,它们的析构函数将被调用,因此数据无效.当跳转主函数的作用域时,[2]持有的指针将被释放两次,导致错误:

正在释放的指针未分配.

一种可能的解决方案是仔细设计复制构造函数和移动构造函数,通过这样做,上述编码范例可以工作.

我尝试过的另一个解决方案是在B类的初始化列表中初始化数组:

B() : a { A(10), A(11) }

这个解决方案有效,我并没有真正告诉初始化列表的基本机制.我认为它必须与简单的构造和复制完全不同.我真的希望有些专家能够详细解释这种机制.当然,这种解决方案难以编码且不灵活.

所以我想知道C中是否有一些编程范例可以解决这个设计问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值