相关疑难解决方法(0)

当C++引用离开其范围时会发生什么?

如果我正确地解释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();
}
Run Code Online (Sandbox Code Playgroud)

_k实例变量放入检查堆栈帧的存在.

令人惊讶的是,它不是段错误而是正确地打印'10',而我认为它A是在堆栈上分配的,并且堆栈帧f()将被至少cout<<调用覆盖.

c++

21
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×1