删除向量管理的资源

时间:2013-04-05 06:39:05

标签: c++

我想要一个向量来保存指向它将拥有的某些对象的指针。

这是矢量:

private: std::vector<fppVirtual*> m_fapps;

我创建了这样的元素:

    m_fapps.push_back(new fpp1(renderingEngine)); //fpp* are subclasses of fppVirtual
    m_fapps.push_back(new fpp2(renderingEngine));
    m_fapps.push_back(new fpp3(renderingEngine));

由于m_fapps是另一个类中的向量实例变量,我想确保类的析构函数正确清理m_fapps

       for (int i=0, size=m_fapps.size();i<size;++i){
        delete m_fapps[i];
       }

这是可接受的内存管理技术吗?我假设这个循环是必需的,因为当它的拥有类被破坏时向量超出范围时,只会删除指向这些new对象的指针,对吗?

3 个答案:

答案 0 :(得分:3)

这很有效(有一些注意事项),但有充分理由不被认为是惯用的C ++。

您应该强烈考虑使用智能指针向量(或类似boost::ptr_vector的智能向量),以避免必须进行手动内存管理。

这也可以免费为您提供异常安全,并且还可以避免在您的外部类可复制时出现令人讨厌的所有权问题。

答案 1 :(得分:2)

由于没有人给你直接回答 - 是的,这是可以接受的,这是释放这段记忆的唯一方法,有vector的声明。

这可以而且应该避免,使用智能指针,如@OliCharlesworth所建议或使用其他容器,由@BjörnPollex提供。

答案 2 :(得分:1)

您应该使用boost::ptr_vector代替。界面相同,但它为您处理内存管理。 See this question有关是否使用ptr_vectorvector<shared_ptr<>>的一些指导原则。

相关问题