共享指针:为什么没有双免费?

nya*_*108 2 c++ shared-ptr double-free

为什么当共享指针超出范围时,此代码不会生成双重释放?

int main()
{
    {
        auto * ptr = new int(1);
        shared_ptr<int> a( ptr );
        shared_ptr<int> b( ptr );
        cout << "ok: " << *a << *b << endl;
    }
    cout << "still ok" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Edg*_*jān 6

这段代码是UB,所以任何事情都可能发生.

对于a 删除的呼吁已经删除指针.


Som*_*ken 6

为什么当共享指针超出范围时,此代码不会生成双重释放?

为什么你认为它没有?

它是未定义的行为,任何事情都可能发生.这包括你的程序打印出来still ok.