(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 的原因,它们允许在大多数用户代码中完全避免deletenew 也几乎可以完全避免,除了创建一个 unique_ptr(对此的补救措施正在进行中) 【参考方案1】:

c++ 是否意识到它们没有指向它们的指针并释放内存?

C++ 没有“实现”任何这样的事情。没有内置的垃圾收集器。

如果您使用new 分配内存并且没有通过相应的delete 调用来释放它,那么您就有内存泄漏。

【讨论】:

【参考方案2】:

Cody 是正确的,C++ 没有垃圾收集器,所以当指向对象的指针丢失时,你会发生内存泄漏。

C++ 在标准库中确实有一些东西可以解决这个问题。如果对象不再有任何std::shared_ptr 指向它,std::shared_ptr 将自动删除该对象。

【讨论】:

以上是关于(c++) 堆上没有任何指针的对象会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

当返回对象的函数在没有返回语句的情况下结束时会发生啥

C++中栈和堆上建立对象的区别

你啥时候想在 C++ 中使用指针和值?

当我在 NULL 对象指针上调用成员函数时会发生啥? [复制]

当我在 NULL 对象指针上调用成员函数时会发生啥? [复制]

c++三种智能指针以及相关知识自写智能指针