destructors, how?

Bryce Kampjes bryce at kampjes.demon.co.uk
Tue Jul 8 21:25:45 UTC 2003


Lex Spoon writes:
 > Ragnar Hojland Espinosa <ragnar at linalco.com> wrote:
 > > The thing is.. I'm leaving behind lots open postgres connections which would
 > > be nicely closed with a "destructor", and right now I don't know how to
 > > automatically close (maybe you cant?) when it should (the sooner the
 > > better). Obviously, postgres complains quite loudly when you have too many
 > > open, and things suddely get very ugly.
 > Finalization works as well as it can, but unfortunately that isn't
 > wonderfully well.  For handling resources other than memory, e.g.
 > database connections, it is usually better if you can work out a way to
 > do it manually.

The idiom that popped up last time was:

	connectionPool withConnection: [:conn| do the work].

withConnection should get a new connection from the pool and also
return it to the pool. Be sure to use ensure: to make sure that the
connection is returned even if an exception occurs as Tim suggested
last time.

This at least gives you lexically scoped access to resources in a
sensibly scoped manner. That is what C++ finalisation really buys
you. 

There was a good discussion about using finalisation and why it's not
a good technique about a year ago. It started with a similar question
about database connection finalisation.

Bryce



More information about the Squeak-dev mailing list