[英]Memory management with new keyword and an STL vector of pointers
将元素添加到此列表时,如何管理向量的析构函数? 超出范围时,对象是否被正确销毁? 是否存在无法正确删除对象的情况? 例如,如果“表”是对象的子级,而我们又向对象指针的向量中添加了一个新表,将会带来什么后果?
vector <object*> _objectList;
_objectList.PushBack(new object);
由于您要创建“裸露”指针的向量,因此C ++可能无法知道所讨论的指针是它们所指向的对象的“所有者”,因此当指针指向对象时,它不会调用这些对象的析构函数。指针消失。 您应该使用简单的“智能”指针而不是“裸”指针作为vector
的项目。 例如,Boost的shared_ptr将完全适合该任务(尽管您可以肯定地使用“便宜”,轻量级的方法来完成此任务,如果您不想整体处理Boost并不需要其他智能指针的话)在您的代码中)。
编辑 :由于您(OP)说使用诸如Boost之类的框架是不可行的,并且有几条评论有用地指出,即使包装 std::auto_ptr
并不能真正成为一个体面的快捷方式,您可能必须实现您的自己的智能指针(或者,如果您发现一个看起来可用的开源独立智能指针模板类,请对其进行审核以符合您的要求)。 本文是C ++中智能指针的有用入门,无论您是必须自己滚动还是审核现有实现。
在您的情况下,对象指针已正确销毁,但实际对象本身不会被触摸。 STL正确地销毁了所有包含的元素-但不会隐式取消对类型的指针的引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.