folgendes: es werden 10 Objekte vom Typ 'Foo' erstellt und nach Möglichkeit in einen Vector gepusht. Wieso wird der Move-Konstruktor 35x (insgesamt, sprich: nicht á Objekt) aufgerufen? Weitere Frage: Wenn ich den Move-Konstruktor lösche ( '= delete' ), müsste doch der Kopier-Konstruktor zum Einsatz kommen, jedenfalls war mein Ansatz dies so zu erzwingen. Der Compiler (MSVC) jagt mir dabei eine Fehlermeldung (C2280 - Es wurde versucht, auf eine gelöschte Funktion zu verweisen.) um die Ohren. Was passiert hier?
Code:
#include <iostream> #include <windows.h> #include <vector> class Foo { public: static UINT copied_count; static UINT moved_count; static UINT created_count; public: Foo() { std::wcout << L"foo created " << created_count++ << std::endl; }; Foo(Foo&& obj) { std::wcout << L"foo moved " << moved_count++ << std::endl; } Foo(const Foo& obj) { std::wcout << L"foo copied " << copied_count++ << std::endl; } }; UINT Foo::copied_count = 0; UINT Foo::moved_count = 0; UINT Foo::created_count = 0; int __cdecl main(_In_ int _Argc, _In_count_(_Argc) _Pre_z_ wchar_t ** _Argv, _In_z_ wchar_t ** _Env) { std::vector<Foo> objVector; for (UINT i = 0; i < 10; i++) { objVector.push_back(Foo()); } std::wcin.get(); return EXIT_SUCCESS; }