emplace_back ruft copy constructor auf?
-
Hallo!
Kurz und knapp, Frage steht im Kommentar:
class Test { int x; public: Test() : x(42) { cout << "DEF CONSTR" << endl; } Test(const Test& rhs) { cout << "COPY" << endl; } Test& operator=(const Test& rhs) { cout << "COPY ASSIGN" << endl; } }; int main() { vector<Test> v; v.emplace_back(); // DEF CONSTR v.emplace_back(); // COPY, DEF CONSTR, warum COPY? cout << v.size() << endl; cin.get(); }
-
Reallokation?
-
std::vector muss einen größeren Speicherbereich reservieren und dafür alle Objekte (in diesem Fall 1) umkopieren.
Übrigends ist es oft sinnvoll, einen mit Movekonstructor mit noexcept anzubieten, weil dann dieser aufgerufen wird.
-
Ahso, ich dachte nämlich, der vector muss doch nur Pointer verschieben.
Aber die Elemente müssen ja hintereinander sein