[英]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_ptr , std :: unique_ptr )的文章或教程,这可以帮助您避免在使用堆分配的对象时出错。 您也可以搜索有关寿命和借用的文章。
最后,如果您想知道编写良好而安全的C ++的推荐做法,则绝对应该阅读isocpp指南: http ://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines。 它们用简单的文字描述了您应该做什么或不应该做什么,为什么以及如何做。
我认为B是另一类。 您刚刚声明了指针。 但尚未实例化。 您尚未为该指针分配任何内存,因此请将其初始化为null。
B* b = NULL;
现在,在解构函数中将其删除之前,请检查是否已分配了任何内存。
if(b){delete b; b = NULL;}
在上面的代码中,如果您分配了任何内存,那么只有它会取消分配。 例如:如果你做了
*b = new b
现在为该特定指针分配了一些内存。 因此它将正确分配。 除非分配一些内存给指针,否则不需要取消分配。 希望这会帮助你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.