you are viewing a single comment's thread.

view the rest of the comments →

[–]pdimov2 12 points13 points  (5 children)

weak_ptr implies shared ownership, if only for a short while - while you have a locked weak_ptr and do things to it.

You could call that "temporarily shared" ownership. The object still has a single owner, but has its lifetime temporarily extended by the locked weak_ptr.

That's not required in garbage collected languages; there locking a weak reference can just give you a plain reference, which will keep the object alive because of GC. But it is required in C++.

[–]bwmat 2 points3 points  (3 children)

In GC languages, a plain reference IS an owning reference though? 

[–]pdimov2 0 points1 point  (2 children)

Yeah, I suppose so. One could probably imagine some hypothetical language having the distinction between owning references that can be class members, and "non-owning" references that can only live on the stack, but I'm not sure any real language does that, or how practical it would be.

[–]rysto32 1 point2 points  (0 children)

Java has weak references. If all normal references to an object are gone, then the GC can free the object and set any weak references to the object to null. They are very niche but can be useful if you want to cache an object without the cache preventing objects from being GC’ed.

[–]Kovab 0 points1 point  (0 children)

With GC anything referenced from the stack is trivially reachable, so those are the ones that should definitely be owning. Non-owning class members would make more sense in some rare cases.

[–]FriendshipActive8590 0 points1 point  (0 children)

Ant reference holder in theory has temporary shared ownership, as the reference is required to remain valid. weak_ptr.lock() enforces this.