堆上的对象和引用

时间:2012-06-30 07:41:03

标签: c++ language-lawyer

在回答this question时,我有点困惑。我们都知道这很好,因为C ++拷贝语义:

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

delete some_obj;

printf("The answer is %d\n", a_copy);

但是这个怎么样?

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

delete some_obj;

printf("The answer is %d\n", a_ref);

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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