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

时间:2014-08-16 19:06:17

标签: c++

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

int* getPointer(int* p) {
    int* x_p = nullptr;
    int& x = *p;
    if(x==7) {
        x_p = &x;
    }
    return x_p;
}

由于为x分配了p的值,我觉得此代码不安全:当x超出范围时,它的相关对象可能会被破坏,将x_p置于无效状态。

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

4 个答案:

答案 0 :(得分:5)

不,*p显然不会被x超出范围而被破坏,否则引用本身会导致双重 - "释放"几乎每次你使用它们。

答案 1 :(得分:3)

创建或分配引用不会创建新对象,因此无需销毁任何内容。因此,当引用超出范围时,不会调用析构函数。更明确地说明:当引用超出范围时,不会调用析构函数。

答案 2 :(得分:1)

引用不会被破坏,对象也是如此。 对象的生命周期,即*p,与函数范围无关。

答案 3 :(得分:0)

销毁原始指针或引用不会破坏它指向的对象。

情况实际上是相反 - 在您的示例中,您手动分配一些内存,将其地址保存在原始指针中,并允许销毁指针,除非您有副本它所指向的地址你无法释放内存并且你有内存泄漏。

如果你想要一个破坏它指向的对象的指针,当它被销毁时,使用std::unique_ptr