允许引用变量在C++中破坏它们的对象吗?

use*_*717 0 c++

假设我们有以下(奇异)代码:

int* getPointer(int* p) {
    int* x_p = nullptr;
    int& x = *p;
    if(x==7) {
        x_p = &x;
    }
    return x_p;
}
Run Code Online (Sandbox Code Playgroud)

由于x分配了值p,我觉得这个代码是不安全的:当x超出范围时,它的关联对象可以被破坏,留下x_p无效状态.

但是,我测试了这段代码,它运行正常.我是幸运的还是x参考变量的事实是否改变了破坏序列?

Lig*_*ica 5

不,*p显然不会x因为超出范围而被破坏,否则引用本身几乎每次都会引起双重"释放".