[fpc-pascal] Constructors & Destructors 101
Nikolay Nikolov
nickysn at users.sourceforge.net
Sun Apr 5 11:57:04 CEST 2009
Jonas Maebe wrote:
>> If you had two different create constructors (for whatever reason),
>> might you not also need two different destroy destructors?
>
> No, the default destructor should always free all resources,
> regardless of how the class instance was created. Otherwise, it would
> also make your code more complex, because throughout the code you
> would have to track how the instance was created, so that in the end
> you could call the correct destructor.
I think there's something even more subtle than that. If a constructor
blows up and raises an exception, the destructor Destroy is called
automatically to clean up the partially created class, before the
exception is handled. So, it's not just .free that is hardcoded to call
destroy. IOW it is an extremely bad idea to have a destructor other than
Destroy for classes and IMO shouldn't be allowed by the language.
However, having multiple constructors is perfectly fine, as long as the
destructor is only one.
More information about the fpc-pascal
mailing list