如果我正确地理解了 C++ 引用,它们就像指针一样,但具有保证数据完整性的特性(没有 NULL,没有(int*)0x12345)。但是当引用对象的作用域被离开时会发生什么呢?如果没有什么魔法(并且可能确实如此),那么引用对象将在幕后被销毁。
我编写了一段代码来验证这一点:
我编写了一段代码来验证这一点:
#include <iostream>
using namespace std;
class A {
public:
A(int k) { _k = k; };
int get() { return _k; };
int _k;
};
class B {
public:
B(A& a) : _a(a) {}
void b() { cout << _a.get(); }
A& _a;
};
B* f() {
A a(10);
return new B(a);
}
int main() {
f()->b();
}
_k
实例变量是用来检查堆栈帧是否存在的。
令人惊讶的是,它并没有发生段错误,而是正确地打印了“10”,尽管我认为A
分配在堆栈上,并且f()
的堆栈帧将被至少一个cout<<
调用覆盖。