繁体   English   中英

如何在析构函数中正确地释放变量

[英]How to properly deallocate variables in deconstructor

假设我要用这种结构创建一个类

 class A
 {
     int a;
     B* b;
 }

我读到,取消分配在析构函数中使用的变量是一件好事。

~A
{
   delete b;
}

但是对于一般类型为int,double,原始类型的变量,我该怎么办? 最好的方法或好的编程规则是什么?

您不需要删除基本类型。

但不仅限于基本类型。 对于您没有分配给new任何内容,您不必调用delete 即使是指针。

您可以在堆上分配基本类型(new ...),但是通常这没有用。

一般规则是您可以将new与任何类型(int,double或您自己的类型)一起使用,并且必须为堆上分配有new的每个变量发出删除操作。


但是,当您寻求最佳实践时,您应该阅读有关智能指针( std :: shared_ptrstd :: unique_ptr )的文章或教程,这可以帮助您避免在使用堆分配的对象时出错。 您也可以搜索有关寿命和借用的文章。

最后,如果您想知道编写良好而安全的C ++的推荐做法,则绝对应该阅读isocpp指南: http ://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines。 它们用简单的文字描述了您应该做什么或不应该做什么,为什么以及如何做。

c++ ,每一个new都应该有一个delete

调用new ,您将在堆上进行分配,并负责对其进行分配。 如果不使用任何new内存,则将内存分配到堆栈上,并将在我们的范围内释放。

请阅读 有关此主题的信息很多。

我认为B是另一类。 您刚刚声明了指针。 但尚未实例化。 您尚未为该指针分配任何内存,因此请将其初始化为null。

 B* b = NULL;

现在,在解构函数中将其删除之前,请检查是否已分配了任何内存。

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

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

*b = new b

现在为该特定指针分配了一些内存。 因此它将正确分配。 除非分配一些内存给指针,否则不需要取消分配。 希望这会帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM