Ich habe eine Frage über die Verwendung von std::move
in C++.Mit std :: move mit Vektoren
Lassen Sie uns sagen, dass ich die folgende Klasse haben, die in seinem Konstruktor einen std::vector
als Parameter übernimmt:
class A
{
public:
A(std::vector<char> v): v(v) {}
private:
std::vector<char> v;
};
Aber wenn ich irgendwo schreiben folgendes:
std::vector<char> v;
A a(v);
der Kopierkonstruktor von std::vector
Wird zweimal angerufen, oder? Also sollte ich Konstruktor für A
wie folgt schreiben?
class A
{
public:
A(std::vector<char> v): v(std::move(v)) {}
private:
std::vector<char> v;
};
Und was, wenn ich das folgende nennen möchte?
std::vector<char> v;
A a(std::move(v));
Ist das in Ordnung mit der zweiten Version des Konstrukteurs, oder sollte ich einen anderen Konstruktor für A
erstellen, die std::vector<char>&&
nimmt?
Eigentlich kann ich lesen, dass Vektor nach dem Umzug verwendet werden kann: https://StackOverflow.com/Questions/9168823/reusing-a-Moved-Container – Igor
Es gibt keine "weg" passiert. Der Vektor ist nach dem Verschieben leer. Sie können damit neue Werte speichern. Nur vorhandene Iteratoren sollten nicht verwendet werden. – StoryTeller
Danke, ja, das klär ich in meiner Antwort – Klaus