堆上的对象和引用

orl*_*rlp 5 c++ language-lawyer

在回答这个问题时,我有点困惑.我们都知道,由于C++拷贝语义,这很好用:

int *some_obj = new int(42);
int a_copy = *some_obj;

delete some_obj;

printf("The answer is %d\n", a_copy);
Run Code Online (Sandbox Code Playgroud)

但是这个怎么样?

int *some_obj = new int(42);
int& a_ref = *some_obj;

delete some_obj;

printf("The answer is %d\n", a_ref);
Run Code Online (Sandbox Code Playgroud)

这是访问已删除的内存吗?

可能会以各种形式多次询问,但这并不是Google友好的.天啊,我无法成为一个体面的头衔.

Dav*_*rtz 4

是的。所以这是不允许的。(您可以通过使用带有更改值的析构函数的类来确保看到差异。)