C++ 对于动态分配的静态成员变量跳过删除是否可以?
将静态成员变量定义为新对象并且从不删除它可以吗?比如说C++ 对于动态分配的静态成员变量跳过删除是否可以?,c++,memory-leaks,static-members,dynamic-memory-allocation,C++,Memory Leaks,Static Members,Dynamic Memory Allocation,将静态成员变量定义为新对象并且从不删除它可以吗?比如说 class A { static vector<BaseClass*> p; }; vector<BaseClass*> A::p = vector<BaseClass*>{new DerivedClassA, ...}; A类 { 静态向量p; }; 向量A::p=向量{new DerivedClassA,…}; 我认为不存在内存泄漏问题,因为p是静态的,它的生命周期在整个程序中,当程序终
class A
{
static vector<BaseClass*> p;
};
vector<BaseClass*> A::p = vector<BaseClass*>{new DerivedClassA, ...};
A类
{
静态向量p;
};
向量A::p=向量{new DerivedClassA,…};
我认为不存在内存泄漏问题,因为p是静态的,它的生命周期在整个程序中,当程序终止时,它的内存将被操作系统释放。它的记忆行为几乎类似于以下内容
class A
{
static vector<unique_ptr<BaseClass>> p;
};
vector<unique_ptr<BaseClass>> A::p = ...;
A类
{
静态向量p;
};
向量A::p=。。。;
但是我不确定我是否正确。这种方法的问题是,即使操作系统将释放
基类
对象占用的内存,也不会调用~BaseClass()。如果这些析构函数做了一些重要的事情,这可能会导致问题。但即使他们不这样做,我也不会推荐这个。任何阅读您的代码的人都会觉得可疑,而且,如果您使用的是像VisualStudio这样的IDE在关机时警告(可以警告)您内存泄漏,这种事情会让它对您大喊大叫。如果你习惯于在它向你吼叫时忽略它,你最终会错过一个真正的问题。这种方法的问题是,即使操作系统会释放基类
对象占用的内存,~BaseClass()
也不会被调用。如果这些析构函数做了一些重要的事情,这可能会导致问题。但即使他们不这样做,我也不会推荐这个。任何阅读您的代码的人都会觉得可疑,而且,如果您使用的是像VisualStudio这样的IDE在关机时警告(可以警告)您内存泄漏,这种事情会让它对您大喊大叫。如果你习惯于在它对你大喊大叫时忽略它,你最终会错过一个真正的问题。没有必要使用新的,只需在堆栈上放置int。我只使用int作为示例。我也指int仅作为示例。修改了我的问题,使其更有意义。@dlf是。我更正了它。没有必要使用新的,只要把int放在stack上。我只使用int作为示例。我还指int作为示例,仅使用tank。修改了我的问题,使其更有意义。@dlf是。我纠正了它。