将静态成员变量定义为新建对象并且永不删除它是否可以?例如
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 :(得分:4)
这种方法的问题是,即使通过操作系统释放BaseClass
对象占用的内存,也不会调用~BaseClass()
。如果这些析构函数做了重要的事情,这可能会导致问题。但即使他们不这样做,我仍然不会推荐这个。对于阅读代码的人来说,它看起来很可疑,而且,如果你使用的是像Visual Studio这样的IDE,可以警告(可以警告)你关闭时的内存泄漏,这种事情会让你大喊大叫。如果你在对你大吼大叫时习惯忽略它,你最终会错过一个真正的问题。