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?非常感谢您的帮助。
shared_ptr只要a指向的对象存在,只要存在至少一个仍指向该对象的共享指针。
在您的示例中,可能只有一个这样的指针,并且由返回foo。
对于v0,p成为shared_ptr保持对象活着。
对于v1,只有一个临时共享指针仅在v1初始化期间存在。在使用引用时,指向的指针和对象已消失,在使用时将其悬空了。