La poubelle (garbage collector) doit observer les ajouts et les suppressions.
Créer les événements « BeforeCreateItem » et « BeforeDestroyItem ». Peut-être en faire de même pour les « After » Ces événements partirons de la racine et seront générés par le « CreateItem ». Cela veux dire que le « CreateItem » devra généré la clef si celle-ci est vide. Le constructeur de l'Item ne devra plus générer une clef si celle-ci est vide, cela permettra de déclencher les assertions en cas d'un appel au constructeur en-dehors du « CreateItem » et du « CreateRoot ». Le « CreateItem » après l'appel à cet évènement fera son traitement normale. C'est à la poubelle de veiller à se débarrasser des éléments portant la même clef. Si elle ne peut pas elle devra déclencher une assertion. Cela permettra au développeur de rechercher les liens qui persistent.
Veiller au chargement des éléments: le chargement regarde dans la poubelle pour y piocher des éléments. Le nouveau comportement doit être de ne plus piocher dans la poubelle. Celle-ci s'occupera de supprimera si possible l'élément avant la création du nouveau portant la même clef, sinon elle déclenchera une assertion.
La poubelle doit surveiller les suppression et récupérer par elle même les éléments.
Item.h, .cpp et .tpp ne doivent plus contenir de notion de poubelle.
La poubelle doit observer la racine.