2016-05-25 11 views
1

Ich habe eine Klasse ohne Kopierkonstruktor oder Zuweisungsoperator. Ich muss eine Instanz dieser Klasse erstellen und initialisieren. Wie mache ich das?So initialisieren Sie eine statische Instanz einer Klasse ohne Kopierkonstruktor>

Code mit dem Problem (Beispiel):

class Q 
{ 
    int w; 
    public: 
    Q():w(19){}; 
    Q(const Q&) = delete; 
    Q& operator = (const Q&) = delete; 

    static Q sQ; 
}; 

Q Q::sQ = Q(); 

On ideone

Anwendungsfall: Ich habe eine Klasse, die von QObject und so hat seinen Zuweisungsoperator und Copy-Konstruktor gelöscht abgeleitet wird. Es sollte eine statische Instanz der Klasse verfügbar sein, wie kann dies erreicht werden?

+0

Funktioniert nicht einfach 'Q Q :: sQ;' für Sie? – HolyBlackCat

+2

Es gibt einen Vorschlag, den Kopierschutz zu garantieren, also würde Code wie dieser auch mit gelöschten Kopier- und Verschiebekonstruktoren kompilieren. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0135r0.html – Brian

+0

Es ist wie alle deine Q sind gleichzeitig mit dem gleichen Baby Q schwanger; neugierig, schwanger in einem unendlichen Kreislauf. Nun, Annahme der Definition Q Q :: sQ; vorgeschlagen von HolyBlackCat, mit einer Memberfunktion void f() {std :: cout << "Rauch und Spiegel \ n"; } Sie können jetzt \t Q q; \t q.sQ.sQ.sQ.sQ.sQ.sQ.sQ.sQ.sQ.sQ.sQ.sQ.sQ.f(); – Loreto

Antwort

4

können Sie die uniform initialization syntax verwenden und die Klasse mit einem leeren Satz von geschweiften Klammern

Q Q::sQ{}; 

oder Sie können wie auch fällt die geschweiften Klammern konstruieren:

Q Q::sQ; 

Beide ausfällt konstruieren sQ.