显然,我宁愿使用std::shared_ptr<T>
或std::unique_ptr<T>
,但我会处理98/03的遗留代码。
我的情况是:
auto* SomeClass::ReturnPtr( void )
{
return this -> UniquePtrObject.get( );
};
如果我这样做会发生什么:
SomeObject.ReturnPtr( ) -> SomeFunction( );
临时指针会自动删除吗?或者我实际上是在造成泄密?
这让我想到了像 Rvalue指针这样的表达式。 Rvalue指针没有意义,是吗?
答案 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)
临时指针真的很危险。每当它指向的数据范围结束时,它将被释放,因此指针将变为悬空,并将尝试访问程序无法访问的某个随机位置。它可能会给您错误的结果,价值或程序可能会因异常非法访问而终止。