有人可以简单地解释为什么它不起作用的原因:

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

07-25 22:28