Reputation: 2914
Reading this stackoverflow answer :
QWeakPointer - Do you sense a reoccurring pattern? Just as std::weak_ptr and boost::weak_ptr this is used in conjunction with QSharedPointer when you need references between two smart pointers that would otherwise cause your objects to never be deleted.
My question is - could anybody explain me such situation on a simple example, when two referencing smart pointers could cause non-deleted objects?
Thank you in advance..
Upvotes: 0
Views: 96
Reputation: 355069
In the following example, neither of the S
objects will ever be destroyed, because the object pointed to by a
owns the object pointed to by b
, and vice-versa.
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
is used to break reference cycles. If object lifetime is known to extend beyond the lifetime of the non-owning pointer, raw pointers can be used as well.
The same principles apply to Qt's smart pointers, like QWeakPointer
.
Upvotes: 2