in reply to Re^3: Should I use weaken on an object attribute containing a reference to an object which contains reference back to original object?
in thread Should I use weaken on an object attribute containing a reference to an object which contains reference back to original object?
Also keep in mind that Perl can reuse refs after destructions, tho I doubt this happens when there is still a weakened ref around. (?)
If all the strong refs to an object go away, it gets freed; there is nothing stopping the memory being reused after that.
When a reference is weakened, a flag is set on the reference, and a record of the reference is added to a list of weakrefs attached to the object (stored under PERL_MAGIC_backref magic). When the object gets freed, it uses that list to set the affected weakrefs to undef to keep things safe.
Note that the weakrefs are stored as a simple list, so freeing a weakref can get expensive when an individual object has many weakrefs to it: it has to do an O(n) scan of the list to find the entry to remove, so removing all of the weakrefs individually is O(n^2) whereas removing them in one go by freeing the object is O(n).
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: Should I use weaken on an object attribute containing a reference to an object which contains reference back to original object?
by LanX (Saint) on Jan 21, 2024 at 19:37 UTC |