如何在解构器中正确释放变量

假设我要创建一个具有这种结构的类

 class A
 {
     int a;
     B* b;
 }

我读过解析器中使用的变量是一件好事。

~A
{
   delete b;
}

但一般来说,我需要做一个类型为int,double,primitive类型的变量吗? 什么是最好的方式或一个好的编程规则?


您不需要删除基本类型。

但不仅限于基本类型。 对于你没有用new分配的任何东西,你不必调用delete 。 即使是指针。


在每一个new c++应该有一个delete

new被调用时,你正在堆上分配,你有责任去分配它。 如果没有使用new的内存,内存将被分配到堆栈上,并将在我们的范围内解除分配。

请阅读这个和这个。 有很多关于这个话题的信息。


我认为B是另一类。 你刚刚宣布了指针。 但还没有实例化。 您尚未为该指针分配任何内存,因此将其初始化为null。

 B* b = NULL;

现在,在解构器中删除它之前,请检查您是否分配了任何内存。

if(b){delete b; b = NULL;}

在上面的代码中,如果你分配任何内存,那么只有它会释放。 例如:如果你做到了

*b = new b

现在一些内存被分配给这个特定的指针。 所以它会正确释放。 除非你为指针分配了一些内存,否则你不需要解除分配。 希望这会帮助你。

链接地址: http://www.djcxy.com/p/79803.html

上一篇: How to properly deallocate variables in deconstructor

下一篇: Run time error on large array sizes in C/C++