gpt4 book ai didi

c++ - C++中智能指针的悬挂引用

转载 作者:行者123 更新时间:2023-12-01 15:10:45 25 4
gpt4 key购买 nike

我了解在C++中最好/更安全的方法是使用智能指针,以确保我们永远不会错过释放/删除分配的内存的机会。现在,我最近在有关C++中智能指针的讲座中遇到了以下问题。这是示例:

void test_pointer(void)
{
typedef std::shared_ptr<MyObject> MyObjectPtr;
MyObjectPtr p1; // Empty

{
MyObjectPtr p2(new MyObject());
p1 = p2;
}
}

现在我知道 std:shared_ptr的最后一个引用完成后,它将被销毁,即,我们退出后, p1函数将被销毁。但是最后的警告是关于悬挂的引用,这让我感到困惑:

MyObjectPtr* pp = new MyObjectPtr(new MyObject());

注释中提到,如果在函数中声明了它,则它是一个悬挂的引用,从而防止了 std::shared_ptr的删除。这是为什么?我们正在使用智能指针,所以我们永远都不会陷入这种情况吗?

最佳答案

我才意识到(如果我错了,请纠正我):

我们正在使用指向std::shared_ptr的原始指针,该指针从未被释放,这就是导致此问题的原因。它永远不会被释放。并且由于函数中发生了这种情况,因此它也可以防止p1被破坏。

关于c++ - C++中智能指针的悬挂引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61129989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com