我与C++和const引用鬼混,并感到困惑,为什么此代码的工作:为什么这个有效?返回在C++常量引用
#include <iostream>
class A {
public:
A() : a_(50) {}
const int& getA() const { return a_; }
private:
const int a_;
};
int main(int argc, char* argv[])
{
A* a = new A();
const int& var = a->getA();
std::cout << var << std::endl;
delete a;
std::cout << var << std::endl;
}
结果:
50
50
这里是我的想法:
变种存储对a_的引用。
当a被删除时,a_也应该被删除。
当var被再次访问时,它不再包含有效的引用并且应该发生段错误。
为什么这样吗?我不相信我做了一个临时副本。
这是我最好的猜测 - 它在这种情况下工作,但它有未定义的行为。绝对不能保证工作,而且非常危险。 – devillighter 2010-02-07 18:40:15
最糟糕的是 - 在调试/发布和单核/双核CPU上表现不同的错误之一 – 2010-02-07 18:54:07