垃圾的记忆
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
相关文章:
- 松弛原子与无同步情况下的记忆连贯性
- 递归函数有效,但无法记忆
- 如何将记忆应用于此递归函数?
- 共享记忆:让我们谈谈它的特殊性
- 为什么nlohmann不释放记忆
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- C++17 多态记忆资源不起作用
- 我是否漏了记忆?
- 关于记忆后这种递归关系的时间复杂度
- 记忆栅栏和记忆屏障是一样的吗
- 使用记忆在 C++ 中实现 Knapstack
- 无论如何可以将webm / mp4文件编译/记忆为.exe程序吗?(C++)
- 如何在硬币兑换中添加记忆
- 动态记忆的删除是如何真正起作用的
- C++遗传,记忆问题
- 使用未声明的标识符"nothrow";你是说"扔"吗?记忆
- Qt驱动器下拉列表仅列出USB记忆棒
- 我找不到瓦尔格林德告诉我的记忆链接
- DFS + 记忆解决方案在 LeetCode 上获取 TLE
- 根据呼叫位置进行记忆