2010-11-23 13 views
2

Um das Kopieren meiner Klasse zu deaktivieren, soll ich als privat deklarieren, aber nicht definieren operator=(const MyClass&) und MyClass(const MyClass&) - muss ich auch move ctor für diese Klasse deaktivieren?Move ctor dilemma

Antwort

5

Es ist noch offen, ob Bewegungskonstruktoren implizit generiert werden (und wann).

Siehe this PDF von Stroustrup vom 2010-10-17 mit dem Untertitel Sollten Verschiebeoperationen standardmäßig generiert werden?

BTW, in C++ 0x können Sie = delete Funktionen eher als sie priviate undefined machen.

class non_copyable { 
    public: 
    non_copyable(const non_copyable&) = delete; 
    non_copyable& operator=(const non_copyable&) = delete; 
}; 
+0

Vielen Dank für Ihre Antwort. Leider arbeite ich an VS2010 und sie haben immer noch delete construct nicht implementiert. Gut zu wissen sowieso. –

+0

@There, das ist in Ordnung, sie haben nicht die Standardgenerierung von Move-Konstruktoren implementiert, so dass Sie sie nicht explizit deaktivieren müssen. – Motti

0

vom VS 2010 documentation Zitiert:

Im Gegensatz zu den Standard-Copykonstruktor, der Compiler bietet keine Standard bewegen Konstruktor.

Also für VS 2010 ist es nicht notwendig, das zu verstecken. Sie diskutieren nicht speziell Standard-Zuweisungsoperatoren, aber ich nehme an, dass sie auch keine generieren werden.