类的动态分配内存与释放

在对类进行实例化时也许会批量申请

例如,申请10个Account实例,

Account *buf=new Account[10];//申请内存,并调用默认构造函数
for(int i=0;i<10;i++)
	new(buf+i) Account("ab",i);调用用具有两个参数的构造函数,在原来的内存上
上面的两次调用构造函数,只能有一个进行_name的内存的动态分配,否则两次的 动态分配只调用一次析构函数,造成内存泄漏
在释放内存时可以直接

delete[] buf//注意调用析构函数的顺序是反的
因为buf就是Account数组,就会以此进行调用析构函数

也可以分别进行调用析构函数

for(int i=0;i<10;i++)
	buf[i].~Account();
不过我认为还是调用delete[] buf更能够和上面的new对应,两者只能使用一个,

但是有一个疑问就是buf只是申请实例本身的内存,而构造函数是在申请char*_name的内存,析构函数是删除_name的内存,当再次进行delete时是删除实例本身的内存,但是实际上却不是这样。

	char *buf=new char [sizeof(Account)*10];//预分配一定的内存
	int offset=sizeof(Account);//根据偏移量进行初始化
	for(int i=0;i<10;i++)
	{
		new(buf+i*offset) Account("ab",i);
	}

	//Account *p=reinterpret_cast<Account*>(buf);
	Account *ps=(Account*)buf;
	
    for(int i=0;i<elems;i++)
        ps[i].~Account();//依次调用析构函数
//     delete[] reinterpret_cast<char*>(ps);
       delete [] buf;删除内存
这个例子和上面的疑问相对应,只有在预分配的情况下才可以说的通




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值