我想要一个向量来保存指向它将拥有的某些对象的指针。
这是矢量:
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
对象的指针,对吗?
答案 0 :(得分:3)
这很有效(有一些注意事项),但有充分理由不被认为是惯用的C ++。
您应该强烈考虑使用智能指针向量(或类似boost::ptr_vector
的智能向量),以避免必须进行手动内存管理。
这也可以免费为您提供异常安全,并且还可以避免在您的外部类可复制时出现令人讨厌的所有权问题。
答案 1 :(得分:2)
由于没有人给你直接回答 - 是的,这是可以接受的,这是释放这段记忆的唯一方法,有vector
的声明。
这可以而且应该避免,使用智能指针,如@OliCharlesworth所建议或使用其他容器,由@BjörnPollex提供。
答案 2 :(得分:1)
您应该使用boost::ptr_vector
代替。界面相同,但它为您处理内存管理。 See this question有关是否使用ptr_vector
或vector<shared_ptr<>>
的一些指导原则。