std::map 作为类成员

时间:2021-03-10 16:44:35

标签: c++ memory

我有一个带有成员 std::map m_lookupTable 的类 X。我应该使用以下哪项:

Class X {
...
private:
    std::map<int,int> m_lookupTable;
...
}

或在 Class 的析构函数中使用 newdelete 分配

class X{
private:
   std::map<int,int>* m_lookupTable;
    X() {
        m_lookupTable = new std::map<int,int>();
    }
    
   ~X(){
       delete m_lookupTable;
    }
} 

什么应该是首选方式,为什么?

3 个答案:

答案 0 :(得分:8)

我建议使用简单的成员。动态分配它,没有任何好处,并且无缘无故地增加了不必要的开销。如果处理不当,它还可能导致内存泄漏。

当你使用作业或复制你的课程时,你也必须小心,然后你必须自己处理。

如果可能,总是喜欢自动而不是动态对象。

答案 1 :(得分:2)

当成员对象的生命周期与外部对象的生命周期相同时,几乎没有理由更喜欢指针。它只会导致更复杂的代码和更多出现错误或内存泄漏的机会。当它是私有成员时更是如此,因为在这种情况下,对象生命周期不太可能需要不同。

答案 2 :(得分:1)

如上所述,使用自动装置几乎总是首选。从长远来看,它要简单得多,而且维护问题也少得多。

话虽如此,如果您正在存储大量 X 类型的对象,则有一种情况可以使用指针,其中只有一些需要 m_lookupTable,并且您处于内存受限的环境中。这是一种罕见的组合,但并非不可能。

相关问题