两个智能指针之间的引用

时间:2012-02-21 22:16:55

标签: c++ qt smart-pointers

阅读此stackoverflow answer

  

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

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

提前谢谢..

1 个答案:

答案 0 :(得分:2)

在下面的示例中,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;
}

std::weak_ptr用于打破参考周期。如果已知对象生存期超出非拥有指针的生命周期,则也可以使用原始指针。

同样的原则适用于Qt的智能指针,如QWeakPointer