取消引用右值shared_ptr

Ta *_*inh 7 c++ rvalue shared-ptr

我正在使用一个导出函数的库:

// there is some type T
std::shared_ptr<T> foo(params);
Run Code Online (Sandbox Code Playgroud)

并且以下代码可以正常工作:

auto p = foo(params);
auto & v0 = *p;
// use v0 as a T's reference
Run Code Online (Sandbox Code Playgroud)

以下崩溃:

auto & v1 = *foo(params);
// use v1 as a T's reference
Run Code Online (Sandbox Code Playgroud)

那么v0和之间有什么区别v1?非常感谢您的帮助。

Sto*_*ica 9

shared_ptr只要a指向的对象存在,只要存在至少一个仍指向该对象的共享指针。

在您的示例中,可能只有一个这样的指针,并且由返回foo

对于v0p成为shared_ptr保持对象活着。

对于v1,只有一个临时共享指针仅在v1初始化期间存在。在使用引用时,指向的指针和对象已消失,在使用时将其悬空了。