我有一个带有成员 std::mapm_lookupTable
的类 X。我应该使用以下哪项:
Class X {
...
private:
std::map<int,int> m_lookupTable;
...
}
或在 Class 的析构函数中使用 new
和 delete
分配
class X{
private:
std::map<int,int>* m_lookupTable;
X() {
m_lookupTable = new std::map<int,int>();
}
~X(){
delete m_lookupTable;
}
}
什么应该是首选方式,为什么?
答案 0 :(得分:8)
我建议使用简单的成员。动态分配它,没有任何好处,并且无缘无故地增加了不必要的开销。如果处理不当,它还可能导致内存泄漏。
当你使用作业或复制你的课程时,你也必须小心,然后你必须自己处理。
如果可能,总是喜欢自动而不是动态对象。
答案 1 :(得分:2)
当成员对象的生命周期与外部对象的生命周期相同时,几乎没有理由更喜欢指针。它只会导致更复杂的代码和更多出现错误或内存泄漏的机会。当它是私有成员时更是如此,因为在这种情况下,对象生命周期不太可能需要不同。
答案 2 :(得分:1)
如上所述,使用自动装置几乎总是首选。从长远来看,它要简单得多,而且维护问题也少得多。
话虽如此,如果您正在存储大量 X 类型的对象,则有一种情况可以使用指针,其中只有一些需要 m_lookupTable,并且您处于内存受限的环境中。这是一种罕见的组合,但并非不可能。