Gary Stainburn wrote:
> Hi folks,
>
> I'm working for the first time with object, my $self being a ref to an
> anonymous hash, i.e.
Couple not so good things here.
>
>
> sub new {
> my $this=shift; # allow for CLASS->new()
> my $class=ref($this) || $this; # or $obj->new();
The docs that suggested this are in the process of being deprecated. It is not a
good idea to have objects create other objects with new(). I'll have more later
on this, if others don't fill in the blanks in the meantime.
>
> my ($name,$type)[EMAIL PROTECTED];
> my $self={};
> bless $self,$class;
> $self->{_Name}=$_[0]; # name of track block section
> $self->{_Type}=$_[1]; # type of block
> $self->{_Links}=(); # blocks connected to me
> $self->{_Signals}=();
> $blocks{$name}=$self;
Don't do this. You are asking for trouble and lock-ups with a construct like
this.
>
> return $self;
> }
>
> Now when I wish to DESTROY the hash, I need to free the memory used by the
> hash, including the two arrays _Links and _Signals.
>
> Am I right in thinking that the arrays, along with the scalars will be deleted
> by the garbage collector when the references in the hash are deleted?
Yes, but circular references, such as the one I pointed out, will gum up Destroy
as well as, most likely, regular functioning.
>
>
> Am I also right in thinking that this will happen if I lose the reference in
> $self by simply running:
>
> $self=undef;
First you will have to free the circular reference.
Joseph
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>