This would make an excellent MooseX:: module. - Stevan
On Jan 2, 2012, at 2:48 AM, Chad Granum wrote: > I suggest an attribute property called 'leak_check' that when set does > the following at destruction: > > * Weaken the reference stored in the attribute > * Return if the ref is undef'd because the object has no strong ref's > * Take action (warn/die/custom) if the ref remains (there is a > hardref somewhere) > > This attribute property would be very useful when you define an > attribute that you know should be the only remaining ref to an object > when your instance is destroyed. > > Example usage: > > has something => ( > isa => 'Something::Temporary', > is => 'ro', > leak_check => sub { # Could also use 'fatal' or 'warn' > my ( $self, $attr_name, $ref ) = @_; > ... > }, > default => sub { Something::Temporary->new() }, > ); > > I just finished debugging an issue that was caused by an object ref > being held in a location where it should have been undef'd. The issue > was in an object that serializes its changes to disk on destruction. > This object was stored in an object implemented with Moose. If Moose > had this capability, and I as a developer had used it on this > attribute which I knew should cleanup with the parent, the memory leak > warning would have saved me time. > > For now, to prevent this issue in the future I have manually added > logic to validate some attributes go away on cleanup. But I think this > would be a valuable tool for developers to activate when they know > what they are doing, and have an attribute that should be cleaned with > the parent. > > Thank you, > > Chad Granum