{
private:
~LicznikOdwołań()
Gdy tworzymy obiekty, dla których są zliczane odwołania, wówczas musimy się upewnić, że to zliczanie jest poprawnie uaktualniane. Znaczy to, że trzeba zwiększać licznik przed użyciem obiektu i zmniejszać go po użyciu obiektu.
Obiekt sam kontroluje to, jak długo istnieje — dlatego nie można go usunąć. Usuwaniem obiektu powinna się raczej zająć metoda zmniejszająca licznik użyć (taka jak metoda Zwolnij w klasie LicznikOdwołań). Gdy licznik użyć spada do zera, wówczas metoda usuwa obiekt.
Dlatego też trzeba uniemożliwić utworzenie obiektu na stosie. Inaczej mówiąc, trzeba uniemożliwić programistom napisanie kodu w sposób:
LicznikOdwołań coś;
Dlaczego? Ponieważ ta instrukcja utworzy obiekt na stosie. Gdy funkcja zakończy działanie, wówczas obiekt zostanie automatycznie usunięty, bez dbania o jakiekolwiek zliczanie odwołań. (Ponadto obiekty utworzone na stosie znikną wraz z zakończeniem funkcji, więc nie będą mogły być użyte poza zasięgiem funkcji, jak wspomniano we wskazówce 53.)
Utworzenie prywatnego destruktora, tak jak we fragmencie „Po”, rozwiązuje ten problem. Jeśli kompilator nie znajdzie publicznego destruktora, to nie pozwoli utworzyć obiektu na stosie.
Przykład: klasa RefCounted w pliku access.cpp
pisanie szybkiego kodu
Kod źródłowy
class DemoNew
private: int m i;
void *operator new(t_rozm cbPrzydziel)