c++ - C++ 引用重新分配
问题描述
我在下面的代码中看到了未定义的行为。我不能完全指出确切的问题,如果有人可以看一下并提供帮助,那将有很大帮助。下面是使用 gcc 6.3.1 构建的。
DBConn* dbconn = new DBConn();
DBConn& d = *dbconn; //reference
....
delete dbconn;
dbconn = new DBConn();
d = *dbconn;
DBConn 的赋值 (=) 运算符
DBConn& DBConn::operator =(const DBConn &rhs) {
if(this != &rhs) {
// deletes member variable pointers initialised with objects created using new operator
// deep copies some member variables
}
return *this;
}
- 执行第二个时,应用程序有时会崩溃
d = *dbconn
。 - 是否
d = *dbconn
重新分配参考变量?
d
据我所知,当内存地址与 ;不同时,应用程序将进入未定义的行为dbconn
;在赋值运算符的重载方法中执行代码,因为this != &rhs
.
解决方案
一旦被删除,引用d
就会悬空。dbconn
是的,d
之后访问的行为是undefined。(请注意,指针值在 . 之后dbconn
是不确定的delete
。)
引用不能被反弹,所以后续
d = *dbconn;
产生诊断。
推荐阅读
- python - 在python中使用带有.p12文件的SHA256加密创建签名
- javascript - 为什么我的导航在body后面打开
- python - 如何在谷歌 colab 中使用 jupyter nbextension“代码美化”?
- reactjs - 用于字符串常量的 useMemo
- java - 臭名昭著的“java.lang.UnsatisfiedLinkError:java.library.path 中没有 lwjgl64”
- java - 向 FragmentManager 添加两个 Fragment 时 RecyclerView 不显示数据
- excel - 使用 Worksheet_Change 删除行会导致 VBA 代码出错
- python - 在 Python 中搜索数组,返回位置
- url-rewriting - WSO2 API Manager 3.2 - 重写资源
- c++ - 在注入 DLL 文件中使用库