从shared_ptr获取原始ptr并再次共享它

Joã*_*ulo 1 c++ smart-pointers

为什么下面的代码不起作用?

class A {};

void f(A* a) {
    shared_ptr<A> c(a);
}

int main() {
    auto a = make_shared<A>();
    auto b = a.get();
    f(b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在范围的最后f,我的程序崩溃了.可能是什么导致了这个?有什么东西试图被删除而且不存在吗?

Oli*_*rth 5

您有两个不相关的共享指针,它们都试图管理相同的资源.这导致了不确定的行为.特别是,当它们超出范围时,它们都会尝试删除资源.

一般来说,就是不要这样做:)