繁体   English   中英

std::map 作为 class 成员

[英]std::map as class member

我有一个 class X 和一个成员 std::map<int,int> m_lookupTable 我应该使用以下哪一项:

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;
    }
} 

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

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

当您使用 class 的分配或复制时,您还必须小心,您必须自己处理。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM