2017-05-29 2 views
3

Betrachten Sie die Klasse MyClass, die keine Standardkonstruktor hat.C++: Wert der globalen Klassenvariablen zuweisen

Ich möchte einen Code schreiben, der wie folgt aussieht:

MyClass instance; 

void init_system() { 
    instance = MyClass(parameters, of, the, constructor); 
} 

Der Code, den ich oben natürlich schrieb nicht mit dem Fehler MyClass hat keine C'tor, die keine Argumente annimmt.

Gibt es einen richtigen Weg, um es zu tun, oder ich muss eine Problemumgehung, z. gemeinsame Zeiger verwenden?

+0

Es ist unklar (zumindest für mich), was Sie versuchen zu tun. Was möchten Sie initialisieren? Statische Membervariablen (AKA-Klassenvariablen)? Erstellen Sie einfach eine statische Init-Methode? Etwas anderes? Bitte klären Sie. Willst du ein Singleton? Oder eine statische Fabrikmethode? – hyde

Antwort

7

Nun, entweder kann ein Standardobjekt Ihrer Klasse sinnvoll existieren, oder es kann nicht.
In letzterem Fall könnten Sie interessiert sein, std::optional (boost::optional vor C++ 17), um die Konstruktion des Objekts zu verschieben.

+0

Eine andere zu berücksichtigende Klasse ist std :: unique_ptr. –

1

Sie können die Initialisierung des Objekts in Ihre init_system() Funktion bewegen:

MyClass& init_system() 
{ 
    static MyClass instance(parameters, of, the, constructor); 
    return instance; 
} 

Sie können das Singletonmuster zu sehen, auch, und lesen Sie die ausführliche Diskussionen darüber;)

Und Ja, eine andere Lösung könnte ein unique_ptr<> oder shared_ptr<> sein.

1

Es gibt 2 Möglichkeiten, dies zu erreichen ....

MyClass instance(parameters, of, the, constructor); 

Würde MyClass mit den richtigen Parametern initialisieren.

A Singletonmuster

MyClass & MyClass::getInstance(){ 
    static MyClass instance(parameters, of, constructor); 
    return instance; 
} 

mit getInstance zum Zeitpunkt des Aufrufs zurückgegeben.

Das zweite Muster verbessert die Kontrolle darüber, wann das Objekt konstruiert wird.

Verwandte Themen