Note that deletion is unconditional, regardless of whether other pointers to the Object are still in use (possibly within other Objects). A safer approach is to defer deletion, until all references to an Object have expired, by using astBeginastBegin/astEndastEnd (together with astCloneastClone and astAnnulastAnnul if necessary).