C语言中的类析构函数内存处理

什么潜在的内存泄漏不会是隐式析构函数处理?我知道如果你有任何存储在堆上的东西它将无法处理它,如果你有一个文件数据库的连接,那需要手动处理.还有别的事吗?那么,像矢量这样的非基础数据类型呢?

另外,在一个显式的析构函数中,需要销毁本已被隐式销毁的非堆变量,还是自动处理它们?

谢谢

解决方法

What potential memory leaks won’t an implicit destructor handle? I kNow that if you have anything stored on the heap it won’t handle it,and if you have a connection to a file or a database,that needs to be handled manually. Is there anything else? What about,say,non-base data types like vectors?

简单地说,你是对的.隐式析构函数唯一没有处理的是以指针形式分配的内存或需要显式释放的其他类型的资源.

关于向量或任何其他类类型对象;所有类都有一个析构函数,负责释放他们的数据.当它超出范围时,会调用此类对象的析构函数.所有基本数据类型如:int,float,double,short,bool等都以类似的方式发布.

Also,in an explicit destructor,need you destroy non-heap variables which would have been destroyed by the implicit,or are they handled automatically?

答案是它们是自动处理的,实际上你永远不应该尝试显式调用对象的析构函数.

在隐式析构函数中,会发生以下情况:

>该类的每个成员变量都依次调用它们的析构函数.

在显式析构函数中,会发生以下情况:

>执行显式析构函数的主体
>该类的每个成员变量都依次调用它们的析构函数.

因此,您可以看到显式析构函数与隐式析构函数非常相似,只是您可以进行任何必要的手动干预.

现在作为管理内存分配对象的一些建议,你几乎应该总是使用RAII(资源获取是初始化).这个问题的关键是智能指针,这些指针在超出范围时被正确删除,就像非堆分配对象一样.一旦你开始使用它们,所有权就成了一个问题,但那是另一天的故事.一个开始使用智能指针的好地方是boost::shared_ptr.(顺便说一句,如果你还没有加速,你可以编写c代码帮自己一个忙…)

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...