微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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代码帮自己一个忙…)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐