如果我返回指针会怎么样?

时间:2016-04-19 15:16:12

标签: c++ pointers

显然,我宁愿使用std::shared_ptr<T>std::unique_ptr<T>,但我会处理98/03的遗留代码。

我的情况是:

auto* SomeClass::ReturnPtr( void )
{
    return this -> UniquePtrObject.get( );
};

如果我这样做会发生什么:

SomeObject.ReturnPtr( ) -> SomeFunction( );

临时指针会自动删除吗?或者我实际上是在造成泄密?

这让我想到了像 Rvalue指针这样的表达式。 Rvalue指针没有意义,是吗?

2 个答案:

答案 0 :(得分:2)

使用

auto* SomeClass::ReturnPtr()
{
    return this->UniquePtrObject.get();
}

只要UniquePtrObject是(或在其上完成reset),您的指针就有效。

所以SomeObject.ReturnPtr()->SomeFunction()有效。

但是下面会有悬挂指针:

auto* createDanglingPointer()
{
    SomeClass SomeObject = MakeSomeClass();

    return SomeObject.ReturnPtr();
}

因为someObject的生命周期在范围的末尾结束。

答案 1 :(得分:-2)

临时指针真的很危险。每当它指向的数据范围结束时,它将被释放,因此指针将变为悬空,并将尝试访问程序无法访问的某个随机位置。它可能会给您错误的结果,价值或程序可能会因异常非法访问而终止。