Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对于动态分配的静态成员变量跳过删除是否可以?_C++_Memory Leaks_Static Members_Dynamic Memory Allocation - Fatal编程技术网

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是。我纠正了它。