On Wed, Jun 3, 2009 at 6:08 PM, Sebastian Theophil <stheophil@think-cell.com> wrote:


> This is simply an uncovered situation, and, IMHO, a very unusual one
> --in support
> of my view I can say I never got a report on this, and the lib's been
> around for
> 4.5 years.

I can't argue against that :-)

>
> On the other hand, erasing inside erase() does work;

What I do is erase() -> ~node() -> erase() and I would guess that
doesn't work for the same reason as before:
If the container has n elements, node deletion goes through the
following states

Sebastian, IMO you should reconsider the design, since you introduced a cyclic dependency in your code.
Even if you fix that, this code will remain fragile and will likely break soon on some other place.

May be my post is not very productive, but to complex logical constructs lead to fragile code. Try to choose one
path on how  it might work and implement this contract only. Don't try to decide to much for your users especially
if your code is a low level abstraction which does not have the information on how it might be used. You will not
be able to cover all the use cases by writing intelligent code. You can only restrict your code to work in proposed manner
and no more. Try to apply SRP to the CObject class. What happens if someone put's your CObject to a local vector instead
of global MI-container, this will still try to delete itself from the global MI-Container?

I definitely know very little about the whole app, to make such critics and apologize for that. It is also not the usual in this mailing
list and might even be against the policy of that list.


With Kind Regards,
Ovanes