C++ 引用重新分配

C++ Reference Reassignment

我在下面的代码中看到未定义的行为。我不能完全确定确切的问题,如果有人可以看一下并提供帮助,那将会很有帮助。下面是使用 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.

删除 dbconn 后,引用 d 悬空

是的,之后访问 d 的行为是 未定义。 (注意指针值dbconndelete之后是不确定。)

引用无法反弹,所以后续

d = *dbconn;

产生诊断结果。