堆上的对象和引用

Objects on the heap and references

本文关键字:引用 对象      更新时间:2023-10-16

在回答这个问题时,我有点困惑。我们都知道,由于复制语义C++,这工作正常:

int *some_obj = new int(42);
int a_copy = *some_obj;
delete some_obj;
printf("The answer is %dn", a_copy);

但是这个呢?

int *some_obj = new int(42);
int& a_ref = *some_obj;
delete some_obj;
printf("The answer is %dn", a_ref);

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

可能以各种形式被问过各种时间,但这对谷歌不是很友好。见鬼,我无法做出一个像样的标题。

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

没错。第二个示例访问释放的内存。引用的实现是指针。很简单。引用是一个无法更改的指针,它具有不同的访问运算符表示法。它们之间没有其他区别。