c++,stl,容器析构时,无用数据对象处理,变成未初始化内存,指针对象需挨个delete并置空,复杂对象需调用特定函数,容器析构时释放所有内存

c++,stl,容器析构时,无用数据对象处理,变成未初始化内存,指针对象需挨个delete并置空,复杂对象需调用特定函数,容器析构时释放所有内存

c++容器中一般存放类对象和指针,以此可以区分为对象容器和指针容器。

此处的容器还是拿vector为例。

一、当容器中存放的是对象数据时:
vector< Obj >
vector调用pop_back函数去除数据的操作,就是调用这个对象的析构函数,将这个类析构掉,只剩下内存空间,size减一。

当该vector生命周期结束后或者手动销毁时,其中的对象数据会一一调用析构函数,变成内存,然后内存会free释放掉。

对于简单的可以直接用析构函数析构的对象,直接pop或等容器一起析构是没什么问题的。

二、当容器中存放的是对象指针时:
vector<Obj *>
需要注意,指针对象是c++的默认类型,有其释放机制,程序员需要注意的是指针指向的堆空间内存。

容器再析构自身和析构数据指针时不会注意到指针指向的堆空间数据,所以在释放指针型容器时如果不做特殊处理,必然会导致内存泄漏。

特殊处理:
对指针的处理需要注意两个地方,
1、delete释放堆内存。
2、赋值运算符将其置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值