是否可以跳过删除动态分配的静态成员变量?

时间:2014-05-16 14:00:05

标签: c++ memory-leaks static-members dynamic-memory-allocation

将静态成员变量定义为新建对象并且永不删除它是否可以?例如

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 = ...;

但我不确定我是否对。

1 个答案:

答案 0 :(得分:4)

这种方法的问题是,即使通过操作系统释放BaseClass对象占用的内存,也不会调用~BaseClass()。如果这些析构函数做了重要的事情,这可能会导致问题。但即使他们不这样做,我仍然不会推荐这个。对于阅读代码的人来说,它看起来很可疑,而且,如果你使用的是像Visual Studio这样的IDE,可以警告(可以警告)你关闭时的内存泄漏,这种事情会让你大喊大叫。如果你在对你大吼大叫时习惯忽略它,你最终会错过一个真正的问题。