两个智能指针之间的引用

References between two smart pointers

本文关键字:指针 之间 引用 智能 两个      更新时间:2023-10-16

正在阅读此堆栈流答案:

QWeakPointer-你感觉到重复出现的模式吗?正如std::weak_ptr和boost::weak _ptr这与QSharedPointer当您需要两个智能指针之间的引用时否则会导致您的对象永远不会被删除。

我的问题是,有人能在一个简单的例子中向我解释这种情况吗?当两个引用智能指针可能导致未删除的对象时?

提前谢谢。。

在以下示例中,两个S对象都不会被销毁,因为a指向的对象拥有b指向的对象,反之亦然。

struct S {
    std::shared_ptr<S> p;
};
void f()
{
    std::shared_ptr<S> a(new S());
    std::shared_ptr<S> b(new S());
    a->p = b;
    b->p = a;
}

CCD_ 4用于中断参考循环。如果已知对象的生存期超过了非拥有指针的生存期,那么也可以使用原始指针。

同样的原理也适用于Qt的智能指针,比如QWeakPointer