我以为我对 C++ 相当擅长,但事实证明我不是。我之前问过的一个问题:C++ const 左值引用 https://stackoverflow.com/questions/4141278/c-const-lvalue-references在答案之一中有以下代码:
#include <iostream>
using namespace std;
int& GenX(布尔重置)
{
静态 int* x = 新 int;
*x = 100;
如果(重置)
{
删除x;
x = 新整数;
*x = 200;
}
返回*x;
}
YStore类
{
民众:
YStore(int& x);
int& getX() { 返回 my_x; }
私人的:
int& my_x;
};
YStore::YStore(int& x)
:我的_x(x)
{
}
int main()
{
YStore Y(GenX(假));
cout
这正是内存管理器决定要做的事情。如果你仔细想想,这很有意义:你刚刚释放了一个 int,然后你再次请求一个 int...为什么内存管理器不应该把你刚刚释放的 int 还给你?
从技术上讲,当您delete
是内存管理器将您释放的内存块附加到空闲列表的开头。然后当你打电话时new
,内存管理器扫描其空闲列表并在第一个条目处找到适当大小的块。
有关动态内存分配的更多信息,请参见“内部存储分配” http://www.flounder.com/inside_storage_allocation.htm.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)