2012-05-06 39 views
25

Manchmal möchte ich weder einen Standardkonstruktor bereitstellen, noch möchte ich, dass der Compiler einen Systemstandardkonstruktor für meine Klasse bereitstellt. In C++ 11 kann ich etwas wie:Wie lösche ich den Standardkonstruktor?

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

Aber zur Zeit meines Dozenten mir, dass in meiner Aufgabe zu tun, ist es nicht möglich. Die Frage ist: Gibt es vor C++ 11 eine Möglichkeit, dem Compiler mitzuteilen, implizit einen Standardkonstruktor anzugeben?

Antwort

34

würde ich sagen, dass es privat machen .. so etwas wie

class MyClass 
{ 
private: 
    MyClass(); 
} 

und niemand (von außerhalb der Klasse selbst oder einen Freund Klassen) in der Lage, den Standard-Konstruktor aufzurufen. Außerdem haben Sie drei Möglichkeiten, die Klasse zu verwenden: entweder um einen parametrisierten Konstruktor bereitzustellen oder um ihn als Hilfsklasse zu verwenden (eine Klasse nur mit statischen Funktionen) oder um eine Factory für diesen Typ in einer Freundesklasse zu erstellen.

+0

Scott Meyers in seinem Buch Effective Modern C++ schreibt, dass Sie auch Ihren privaten Konstruktor ohne Definition verlassen können. Es wird Ihnen helfen, Ihren Standardkonstruktor vor dem Aufruf von Freundschaftsklassen zu schützen (Linkfehler wird ausgelöst). – MrPisarik

12

Sicher. Definieren Sie Ihren eigenen Konstruktor, Standard oder nicht.

Sie können es auch als privat deklarieren, so dass es unmöglich ist, anzurufen. Dies würde Ihre Klasse leider völlig unbrauchbar machen, es sei denn, Sie stellen eine statische Funktion bereit, um sie aufzurufen.

Verwandte Themen