阅读此stackoverflow answer:
QWeakPointer - 您是否感觉到重复出现的模式?就像 std :: weak_ptr和boost :: weak_ptr这个用起来 当你需要两个智能指针之间的引用时,QSharedPointer 否则会导致您的对象永远不会被删除。
我的问题是 - 当有两个引用智能指针可能导致未删除的对象时,是否可以通过一个简单的例子向我解释这种情况?
提前谢谢..
答案 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
。