垃圾记忆?

San*_*996 2 c++ garbage-collection pointers

我刚刚阅读了一篇解释Wild指针的文章.对于垃圾内存,它指出当指向内存对象的指针丢失时,即它指示内存项继续退出,但指向它的指针丢失; 当内存未明确释放时会发生.我试图通过一个例子来理解这一点.这是我写的

#include <iostream>

using namespace std;
int q =12;
int point()
{
   int *p;
   p = &q;
   //delete p;
}
int main()
{
   point();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

因此,在上面的例子中,内存项(q)继续存在,但是指向它的指针丢失了.我可能误解了一切都错了,但如果我理解正确,那么这个例子是否解决了上面给出的"垃圾记忆"定义?如果是,那么我应该使用delete p,对吗?

Kar*_*k T 10

C++没有你理解它的方式进行垃圾收集..但你所展示的不是"内存泄漏",这就是我认为你的意思.

在这种情况下,您指向一个非动态分配的内存位置,并且可以在程序持续时间内从函数外部访问.


int point()
{
   int *p = new int();
   //delete p;
}
Run Code Online (Sandbox Code Playgroud)

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


C++中推荐的风格让所有分配的内存自动解除分配本身,尽可能,一个叫概念资源获取就是初始化(RAII) ,使用智能指针如下.

int point()
{
   std::unique_ptr<int> p(new int());
   //delete p;  // not needed.
}
Run Code Online (Sandbox Code Playgroud)

当变量p被销毁时,在其范围的末尾,它将自动调用delete已分配的内存,因此您不必这样做.通过自己清理东西,我们启用下面的功能.

C++是我最喜欢的垃圾收集语言,因为它产生的垃圾很少

Bjarne Stroustrup的常见问题解答:你真的这么说吗?检索2007-11-15. http://en.wikiquote.org/wiki/Bjarne_Stroustrup