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

时间:2017-09-08 09:18:55

标签: c++

假设我创建了一个具有此结构的类

Zend_Http_Client_Adapter_Socket

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

 class A
 {
     int a;
     B* b;
 }

但是我怎么做一般的int,double,primitive类型的变量呢?什么是最佳方式或良好的编程规则?

4 个答案:

答案 0 :(得分:4)

您不需要删除基本类型。

但不仅仅是基本类型。对于您未使用new分配的任何内容,您不必致电delete。即使是指针。

答案 1 :(得分:0)

你可以在堆上分配原语类型(new ...)但通常这没用。

一般规则是可能对任何类型(int,double或您自己的类型)使用new,并且必须为每个已分配的变量发出删除在新的堆上。

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

最后,如果您想知道编写优秀且安全的C ++的建议做法,您一定要阅读isocpp指南:http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines。他们用简单的语言描述了你应该做什么或不该做什么,为什么以及如何做。

答案 2 :(得分:0)

c++ new delete应该有一个new

当调用new时,您正在堆上分配,并且您负责解除分配。如果没有使用import bodyParser from "body-parser"; ,则在堆栈上分配内存,并在进入我们的范围时释放内存。

请阅读thisthis。关于这个主题有很多信息。

答案 3 :(得分:0)

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

 B* b = NULL;

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

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

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

*b = new b

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