move constructor und deleted copy constructor
-
Hi,
struct A { A(int n) {} A(const A& a) = delete; }; int main() { A b = A(5); } // g++ -std=c++0x -O0 main.cc -o main
Funktioniert natürlich nicht:
error: use of deleted function ‘A::A(const A&)’
Wenn ich nun auch den move constructor definiere, dann funktionierts wieder:
#include <iostream> using namespace std; struct A { A(int n) {} A(const A& a) = delete; A(A&& a) { cout << "move" << endl; } }; int main() { A b = A(4); } // g++ -std=c++0x -O0 main.cc -o main
Aber...Eine move Ausgabe auf der Konsole sehe ich nicht. Irgendwas scheine ich noch nicht ganz richtig verstanden zu haben und move geschieht dennoch auf magische Weise.
-
Der Compiler darf die Temporary eliminieren, sobald ein passender Copy/Move-Ctor vorhanden ist.
-
Kellerautomat schrieb:
Der Compiler darf die Temporary eliminieren, sobald ein passender Copy/Move-Ctor vorhanden ist.
Ok danke. Ich dachte das könnte ich mit -O0 irgendwie ausschließen.
-
-fno-elide-constructors
Ich seh' zwar keinen Sinn in diesem Schalter, aber wenn es nur zu Testzwecken ist ...
-
Super