【发布时间】:2021-06-28 16:08:54
【问题描述】:
我在下面的代码中看到了未定义的行为。我不能完全指出确切的问题,如果有人可以看一下并提供帮助,那将有很大帮助。下面是使用 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。
【问题讨论】:
-
永远不能重新分配引用。