ple*_* me 4 c++ static memory-management
我以为我对C++相当不错,事实证明我不是.我问过上一个问题:C++ const左值引用在其中一个答案中有以下代码:
#include <iostream>
using namespace std;
int& GenX(bool reset)
{
static int* x = new int;
*x = 100;
if (reset)
{
delete x;
x = new int;
*x = 200;
}
return *x;
}
class YStore
{
public:
YStore(int& x);
int& getX() { return my_x; }
private:
int& my_x;
};
YStore::YStore(int& x)
: my_x(x)
{
}
int main()
{
YStore Y(GenX(false));
cout << "X: " << Y.getX() << endl;
GenX(true); // side-effect in Y
cout << "X: " << Y.getX() << endl;
return 0;
}
上面的代码输出X:100,X:200.我不懂为什么.我玩了一下,并添加了一些输出,即删除x之前的cout; 和新的x之后的cout; 在复位控制块内.
我得到的是:删除之前:0x92ee018之后:0x92ee018
所以,我认为静态无声地更新到x,第二个getX正在播放(删除后)未初始化的内存; 为了测试这个,我添加了ax = 0; 在删除之后,在新的之前,另一个cout确保x确实被重置为0.这是.
那么,这里发生了什么?为什么新的返回完全相同的内存块,以前的删除据说是免费的?这只是因为操作系统的内存管理器决定做什么,或者我缺少什么特别的静态?
谢谢!