垃圾的记忆

Garbage memory?

本文关键字:记忆      更新时间:2023-10-16

我刚刚读了一篇介绍野生指针的文章。对于垃圾内存,它表示当指向内存对象的指针丢失时,即表明该内存项继续退出,但指向它的指针丢失;它发生在内存没有显式释放的时候。我试图用一个例子来理解这一点。这是我写的

#include <iostream>
using namespace std;
int q =12;
int point()
{
   int *p;
   p = &q;
   //delete p;
}
int main()
{
   point();
   return 0;
}
所以,在上面的例子中,内存项(q)仍然存在,但是指向它的指针丢失了。我可能完全误解了它,但如果我理解正确,那么这个例子是否解决了上面给出的"垃圾内存"定义?如果是,那么我应该用delete p,对吧?

c++没有你所理解的垃圾回收。但是你所显示的是而不是"内存泄漏",这就是我认为你的意思。

在这种情况下,您指向的内存位置不是动态分配的,并且在程序运行期间可以从函数外部访问。


int point()
{
   int *p = new int();
   //delete p;
}

这现在是一个内存泄漏,因为内存仍然被分配,但是没有人可以再访问它。如果这是Java或任何其他支持GC的语言,那么这些内存现在将被排队等待垃圾收集


在c++ 中推荐的风格是使所有分配的内存尽可能地自动释放自己,使用一个称为资源获取即初始化(RAII)的概念,使用智能指针如下所示。
int point()
{
   std::unique_ptr<int> p(new int());
   //delete p;  // not needed.
}

当变量p被销毁时,在它的作用域结束时,它会在分配的内存上自动调用delete,所以您不必这样做。通过让东西自己清理,我们启用了下面的

c++是我最喜欢的垃圾收集语言,因为它生成了小垃圾

Bjarne Stroustrup的FAQ:你真的这么说吗?检索日期:2007-11-15。http://en.wikiquote.org/wiki/Bjarne_Stroustrup