Zasada pięciu
Jeśli klasa potrzebuje własnego destruktora, to niemal na pewno potrzebuje też własnego konstruktora kopiującego, kopiującego operatora przypisania oraz — od C++11 — konstruktora i operatora przypisania przenoszącego.
Uzasadnienie jest proste: potrzeba choćby jednej z tych funkcji oznacza, że klasa zarządza zasobem, a automatycznie generowane przez kompilator wersje pozostałych zrobią wtedy coś złego — płytko skopiują wskaźnik, przez co dwa obiekty uznają się za właścicieli tej samej pamięci i zwolnią ją dwukrotnie. Pierwotnie była to zasada trzech: destruktor, konstruktor kopiujący i kopiujące przypisanie. C++11 dodało dwie operacje przenoszenia i wraz z nimi nieprzyjemną pułapkę: samo zadeklarowanie destruktora wyłącza niejawnie generowane operacje przenoszenia. Klasa trzymająca się starej zasady trzech po cichu kopiuje tam, gdzie powinna przenosić — wciąż poprawnie, ale mierzalnie wolniej i łatwo to przeoczyć.