What is legal in a destructor?
kb3ctd2 at yahoo.com
Sun Aug 27 10:02:54 PDT 2006
"Lutger" <lutger.blijdestijn at gmail.com> wrote in message
news:ecruhp$2hug$1 at digitaldaemon.com...
> I'm having some trouble understanding exactly what is and what isn't legal
> to do in a (non-auto) destructor. I'm thinking about these specifically:
> - using the 'this' pointer as a parameter to make calls to another (from
> another class or free) function.
> - calling member functions.
> - referencing delegates to member functions.
> - referencing data fields with types like int.
As a general rule, you shouldn't try to access any GC'ed memory within a
destructor. This means most things allocated by your program, such as
references to other class instances, arrays, and blocks of memory allocated
by 'new'. When the destructor is run, the 'this' pointer is still valid, so
you can call other member functions and use it as a parameter, but again,
those functions shouldn't access GC'ed memory.
I mostly use destructors to clean up non-GC'ed resources, such as system
resources (file handles, COM interfaces etc.). I also set references to
GC'ed memory to null, which isn't really required, but it might make the
GC's job a little easier.
More information about the Digitalmars-d-learn