首页 > 解决方案 > 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;
}
  1. 执行第二个时,应用程序有时会崩溃d = *dbconn
  2. 是否d = *dbconn重新分配参考变量?

d据我所知,当内存地址与 ;不同时,应用程序将进入未定义的行为dbconn;在赋值运算符的重载方法中执行代码,因为this != &rhs.

标签: c++pointersreference

解决方案


一旦被删除,引用d就会悬空。dbconn

是的,d之后访问的行为是undefined。(请注意,指针值在 . 之后dbconn不确定delete。)

引用不能被反弹,所以后续

d = *dbconn;

产生诊断。


推荐阅读