template<typename class_type>
class ObjectDeleterKey< class_type >
You can specify classes that can delete objects with private constructors.
Niektóre obiekty są zadeklarowane z prywatnym (chronionym) destruktorem, w celu uniemożliwienia skasowania ich przez niepowołane klasy. Jednakże musi istnieć jakiś dostęp do destruktorów, aby nie powodować wycieków pamięci. Do kasowania obiektów służy klasa ObjectDeleter. Aby stworzyć obiekt tej klasy potrzebny jest "klucz", którym jest własnie ta klasa.
Klucz ma prywatne konstruktory, w związku z czym może zostać stworzony jedynie przez klasy, które są z nim zaprzyjaźnione. Domyślnie klasami zaprzyjaźnionymi są ResourceManager i ResourceContainer, aby stworzyć klucz dla innych typów klas, należy napisać specjalizację tego szablonu.
Odddelegowanie innej klasy do kasowania obiektów ma za zadanie zlikwidowanie niewygodnych zależności. Dzięki temu obiekty, które mają być kasowane, nie muszą się przyjaźnić bezpośrednio z klasami, które mogą je usuwać. Wystarczy, że zadeklarują przyjaźń z obiektem ObjectDeleter. Taka przyjaźń jest niegroźna, ponieważ klasa ta nie służy do niczego innego niż kasowanie obiektów, więc jesteśmy pewni, że zmiany wprowadzone w klasie deklarującej przyjaźń nie będą psuły całego kodu aplikacji.