0

将静态成员变量定义为新对象并且永远不删除它可以吗?例如可以跳过删除动态分配的静态成员变量吗?

class A 
{ 
    static vector<BaseClass*> p; 
}; 

vector<BaseClass*> A::p = vector<BaseClass*>{new DerivedClassA, ...}; 

我觉得没有内存泄漏问题,因为P是静态的,它的生命周期是在整个程序和它的内存将被操作系统的程序终止时被释放。它的记忆行为看起来几乎和以下类似

class A 
{ 
    static vector<unique_ptr<BaseClass>> p; 
}; 

vector<unique_ptr<BaseClass>> A::p = ...; 

但我不确定我是否正确。

+0

有没有必要使用新的,只是把INT放在堆栈 – 4pie0

+0

我只使用int作为示例。 – user1899020

+0

我也是指int只作为示例 – 4pie0

回答

4

这种方法的问题是,即使通过内存占用的内存将被操作系统释放,~BaseClass()也不会被调用。这可能会导致问题,如果这些析构函数做重要的事情。但即使他们不这样做,我仍然不会推荐这个。如果你正在使用像Visual Studio这样的IDE,在关机时警告(可以警告)关于内存泄漏的事情,这种事情会让你大吼一声。如果你习惯于在对你大吼时忽略它,你最终会错过一个真正的问题。