假设我有一个STL向量,其元素是指向其他类的原始指针。很明显,向量的析构函数不会释放这些指针所拥有的内存。是否可以实现释放此内存的自定义析构函数?
答案 0 :(得分:4)
在现代C ++中,使用vector<unique_ptr<T>>
,并为您管理所有所有权问题。
如果C ++ 11不可用,您可以使用shared_ptr
(来自Boost或TR1)而不是unique_ptr
,或者您可以使用Boost's pointer containers。 (不要试图使用已弃用的auto_ptr
,因为这使得从容器中意外删除指针太容易了。据推测,第一条评论指的是这一点,但是它与更安全的{{ 1}}。)
如果出于某种原因你不能使用它们,或者如果你真的想自己做这项工作,你需要将这个向量包装在一个类中:
答案 1 :(得分:3)
没有。在销毁向量之前,您应该手动清除元素。像
这样的东西std::for_each(v.begin(), v.end(), [](const T* p) { delete p; });
或者你可以使用boost::ptr_vector
(或一些smart_pointers)来处理这种情况。
答案 2 :(得分:0)
你需要在删除时迭代向量并调用其中每个元素的析构函数
或者我想最好的选择是,而不是保存A *,保存shared_ptr<A>
然后当没有人不再指向A时,它将被破坏