堆上的对象和引用
Objects on the heap and references
在回答这个问题时,我有点困惑。我们都知道,由于复制语义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);
这是在访问已删除的内存吗?
可能以各种形式被问过各种时间,但这对谷歌不是很友好。见鬼,我无法做出一个像样的标题。
是的。所以这是不允许的。(可以通过使用带有更改值的析构函数的类来确保看到差异。
没错。第二个示例访问释放的内存。引用的实现是指针。很简单。引用是一个无法更改的指针,它具有不同的访问运算符表示法。它们之间没有其他区别。
相关文章:
- 引用对象成员函数的成员函数
- 从 Base 引用对象调用派生类的成员
- 转换引用对象的边界框?
- 现代编译器会优化只引用对象子集的局部变量吗
- l值引用对象上的Constexpr成员函数:Clang和gcc不同意
- 将 const 类型引用对象注册为类成员对象C++
- Boost Intervocess:通过迭代通过从结构引用对象的映射进行迭代时
- 无法用2D矢量成员引用对象
- 在由引用对象传递中访问由引用对象传递的变量
- 如何使用QString引用对象名称
- 使用自动迭代器引用对象
- C++ 在另一个对象中引用对象的当前状态
- 使用共享对象和引用对象进行引用计数
- 未显式引用对象的全局对象构造函数在最终二进制文件 - LD 中被丢弃
- 引用对象的动态类型何时可以更改
- 引用对象内部的指针
- C++从全局静态函数中引用对象
- C++如何仅在没有其他人直接或间接引用对象指针时删除该指针
- 如何使用C++引用对象
- 为什么引用对象仅保存特定类型的引用