免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6955 | 回复: 2
打印 上一主题 下一主题

vector对象调用clear()函数时,其包含的元素指向的对象是否能自动析构 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-26 12:05 |只看该作者 |倒序浏览
我定义了一个Base类,然后定义了一个vector对象来存放指向Base类的对象指针,即vector<Base*>。然后我用new创建了几个Base对象,当把这几个对象的指针放到vector中。些时我调用vector对象的clean()函数时,会否调用Base对象的析构函数,对 我刚才用new生成的Base对象进行析构。还是要我自己用Vector中Base指针逐一调用delete进行手动析构。

class Base
{  
  ......
};

vector<Base*> baseList;
Base base1* = new Base();
Base base2* = new Base();
Base base3* = new Base();
baseList.push_back(base1);
baseList.push_back(base2);
baseList.push_back(base3);

//些时我调用clean函数时能否自己把我刚才NEW的几个对象自动析构呢?
baseList.clean();

//如果不能自动析构,我是否自行对baseList中的每个对象调用一个delete呢?

论坛徽章:
0
2 [报告]
发表于 2010-10-26 12:15 |只看该作者
回复 1# liyaobin1234

裸指针不行。可以考虑使用智能指针。

论坛徽章:
0
3 [报告]
发表于 2010-10-26 13:02 |只看该作者
vector<Base*>的对象类型是Base*,而Base*实例指向的Base对象其实和指针所在的vector没什么直接的关系。Base*作为裸指针被销毁时不会管它指向什么,因此会造成泄漏。如果需要自动析构,如LS所说,用智能指针代替Base*(因为用在容器中,这里的智能指针需要支持值复制语义)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP