0

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

这是向量:

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删除指向这些对象的指针,对吗?

4

3 回答 3

3

这有效(有一些警告),但不被认为是惯用的 C++,这是有充分理由的。

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

这也将免费为您提供异常安全性,并且还可以避免在您的外部类是可复制的情况下发生的令人讨厌的所有权问题。

于 2013-04-05T06:41:26.477 回答
2

因为还没有人给你直接的答案 - 是的,这是可以接受的,这是释放这个内存的唯一方法,拥有vector.

正如@OliCharlesworth 建议的那样,使用智能指针或使用@BjörnPollex 提出的其他容器,可以而且应该避免这种情况。

于 2013-04-05T06:44:41.693 回答
1

你应该boost::ptr_vector改用。界面是相同的,但它会为您处理内存管理。有关是否使用或的一些准则,请参阅此问题ptr_vectorvector<shared_ptr<>>

于 2013-04-05T06:41:17.790 回答