On 27-ott-10, at 22:41, Walter Bright wrote:

Fawzi Mohamed wrote:
the only thing is that the invariant is not checked *after* those method that destroy the object, it will be ok to require a special name for that method (for example destroy, dealloc or similar) if you want to avoid misusage.

There is a method that does that, it's called the destructor. An invariant is not checked after the destructor is run.

ok I don't think that this is a major feature, or anything like that, so I will stop arguing after this,
but I still believe that it would be useful.
The destructor is an example of a method that should not check the invariant, but it does not address my use case, because one cannot explicitly call a destructor, and there is an important difference between a destructor called by the GC and a destructor called explicitly: the one called explicitly can access the memory of the object.

Not only that it might be useful for some methods to delete the object itself. A classical example is reference counting, the last release (the one that sets the refCount to 0) should be able to delete the object. It is not natural to make this impossible, or to force al reference counted object to have no invariant.

Reply via email to