在向此列表中添加元素时,如何管理向量的析构函数?当对象超出范围时,对象是否被正确销毁?是否存在不能正确删除对象的情况?例如,如果"table"是对象的子节点会产生什么后果,我们在对象指针的向量中添加了一个新表?
vector <object*> _objectList;
_objectList.PushBack(new object);
Run Code Online (Sandbox Code Playgroud)
因为你正在制作一个"裸"指针的向量,所以C++不可能知道所讨论的指针意味着它们所指向的对象具有"所有权",因此当它们不会调用那些对象的析构函数时指针消失了.您应该使用简单的"智能"指针而不是"裸"指针作为vector项目.例如,Boost的shared_ptr对于任务来说是完全足够的(尽管如果你不想整体处理Boost并且没有其他智能指针需求,你肯定可以用"更便宜",更轻量级的方法来做到这一点)在你的代码中).
编辑:因为你(OP)说使用像Boost这样的框架是不可行的,并且有一些评论有用地指出即使包装 std::auto_ptr并不真正有资格作为一个合适的捷径,你可能必须实现自己的智能指针(或者,如果您找到一个看起来可用的开源,独立智能指针模板类,请对其进行审核以确保符合您的要求).这文章是一个有用的入门智能指针在C++中,你是否有推出自己或审核现有的实现.