加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:27:32 所属栏目:百科 来源:网络整理
导读:什么潜在的内存泄漏不会是隐式析构函数处理?我知道如果你有任何存储在堆上的东西它将无法处理它,如果你有一个文件或数据库的连接,那需要手动处理.还有别的事吗?那么,像矢量这样的非基础数据类型呢? 另外,在一个显式的析构函数中,需要销毁本已被隐式销毁的
什么潜在的内存泄漏不会是隐式析构函数处理?我知道如果你有任何存储在堆上的东西它将无法处理它,如果你有一个文件或数据库的连接,那需要手动处理.还有别的事吗?那么,像矢量这样的非基础数据类型呢?

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

谢谢

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读