2012-05-06 27 views
25

Czasami nie chcę dostarczać domyślnego konstruktora, ani też nie chcę, aby kompilator dostarczał domyślny konstruktor systemu dla mojej klasy. W C++ 11 mogę zrobić coś takiego:Jak usunąć domyślny konstruktor?

class MyClass 
{ 
    public: 
    MyClass() = delete; 
}; 

Ale obecnie mój wykładowca nie pozwala mi tego zrobić w moim zadaniu. Pytanie brzmi: przed C++ 11, czy istnieje sposób, aby powiedzieć kompilator, aby zatrzymać domyślnie dostarczyć domyślny konstruktor?

Odpowiedz

34

powiedziałbym sprawiają, że prywatny .. coś

class MyClass 
{ 
private: 
    MyClass(); 
} 

i nikt (spoza sama lub klasy friend class) będzie w stanie wywołać konstruktora domyślnego. Ponadto będziesz miał trzy opcje użycia klasy: albo do dostarczenia sparametryzowanego konstruktora, albo użyj go jako klasy narzędziowej (jednej tylko z funkcjami statycznymi) lub do stworzenia fabryki dla tego typu w klasie przyjaciół.

+0

Scott Meyers w swojej książce Effective Modern C++ pisze, że można również pozostawić swój prywatny konstruktor bez definicji. Pomoże to chronić domyślny konstruktor przed wywołaniem z klas znajomych (zostanie zgłoszony błąd łącza). – MrPisarik

12

Pewnie. Zdefiniuj własny konstruktor, domyślny lub inny.

Możesz również zadeklarować go jako prywatny, aby uniemożliwić połączenie. To niestety sprawi, że twoja klasa będzie kompletnie bezużyteczna, chyba że dasz jej funkcję statyczną.

Powiązane problemy