有人可以简单地解释为什么它不起作用的原因:
std::shared_pointer<Bar> getSharedPointer() {
return std::make_shared<Bar>();
}
...
auto foo = getSharedPointer().get();
显然,使用原始指针
foo
将导致段错误,因为getSharedPointer()
返回的共享指针的生命周期将用完。我以某种方式希望它能持续到作用域的尽头(就像它里面的任何块一样)。这是正确的吗?这种情况有类似的例子吗?
最佳答案
对于getSharedPointer().get();
,getSharedPointer()
返回一个临时std::shared_ptr
,它将在表达式之后立即销毁,并且它所管理的指针也将被删除。该foo
变为悬挂后,对其的任何取消引用都会导致UB。
auto foo = getSharedPointer().get();
// foo have become dangled from here
您可以改用命名变量:
auto spb = getSharedPointer();
auto foo = spb.get();
// It's fine to use foo now, but still need to note its lifetime
// because spb will be destroyed when get out of its scope
// and the pointer being managed will be deleted too