(c++) 堆上没有任何指针的对象会发生啥?
Posted
技术标签:
【中文标题】(c++) 堆上没有任何指针的对象会发生啥?【英文标题】:(c++) what happens to objects on the heap that don't have any pointers to them?(c++) 堆上没有任何指针的对象会发生什么? 【发布时间】:2013-04-04 03:02:44 【问题描述】:它们会成为内存泄漏还是 c++ 意识到它们没有指向它们的指针并释放内存?如果必须删除它们,我只需使用删除命令对吗?
【问题讨论】:
什么都没有;他们坐在那里,占据空间,永远不会被重复使用。这称为内存泄漏,是个坏消息。 根据定义这是内存泄漏。 在你错误地认为 C++ 是一门很难的语言之前,你需要不断地注意释放你的记忆,你没有。这就是我们有container classes 和smart pointers 的原因,它们允许在大多数用户代码中完全避免delete
。 new
也几乎可以完全避免,除了创建一个 unique_ptr
(对此的补救措施正在进行中)
【参考方案1】:
c++ 是否意识到它们没有指向它们的指针并释放内存?
C++ 没有“实现”任何这样的事情。没有内置的垃圾收集器。
如果您使用new
分配内存并且没有通过相应的delete
调用来释放它,那么您就有内存泄漏。
【讨论】:
【参考方案2】:Cody 是正确的,C++ 没有垃圾收集器,所以当指向对象的指针丢失时,你会发生内存泄漏。
C++ 在标准库中确实有一些东西可以解决这个问题。如果对象不再有任何std::shared_ptr
指向它,std::shared_ptr
将自动删除该对象。
【讨论】:
以上是关于(c++) 堆上没有任何指针的对象会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章
当我在 NULL 对象指针上调用成员函数时会发生啥? [复制]