Heim > Backend-Entwicklung > C++ > Wie sollten Sie einen verschobenen C-Container wiederverwenden?

Wie sollten Sie einen verschobenen C-Container wiederverwenden?

Linda Hamilton
Freigeben: 2024-12-04 19:58:11
Original
688 Leute haben es durchsucht

How Should You Reuse a Moved C   Container?

Wiederverwendung eines verschobenen Containers: Sicherstellung des korrekten Verhaltens

Wenn ein Container verschoben wird, wird er gemäß dem C 0x-Standardentwurf in einen „gültigen, aber nicht spezifizierten Zustand“ versetzt . In einer solchen Situation ist es wichtig zu verstehen, wie der verschobene Container korrekt wiederverwendet wird.

Beachten Sie das folgende Code-Snippet:

std::vector<int> container;
container.push_back(1);
auto container2 = std::move(container);

// ver1: Do nothing
//container2.clear(); // ver2: "Reset"
container = std::vector<int>() // ver3: Reinitialize

container.push_back(2);
assert(container.size() == 1 && container.front() == 2);
Nach dem Login kopieren

Gemäß dem Standard Option ver3, die eine Neuinitialisierung des beinhaltet verschobener Container, ist der richtige Ansatz. Dies liegt daran, dass ein Objekt nach einem Verschiebevorgang in einen nicht spezifizierten Zustand versetzt wird.

Der Standard definiert einen „gültigen, aber nicht spezifizierten Zustand“ wie folgt:

„ein Objektzustand, der es nicht ist.“ angegeben, mit der Ausnahme, dass die Invarianten des Objekts erfüllt sind und Operationen am Objekt sich wie für seinen Typ angegeben verhalten"

Dies bedeutet, dass das verschobene Objekt aktiv bleibt und bedient werden kann an, aber nur, wenn die Voraussetzungen erfüllt sind. Im Falle eines Vektors hat das Löschen des Containers mit clear() keine Vorbedingungen und bringt ihn in einen bekannten Zustand zurück.

Daher wird empfohlen, clear() zu verwenden, um einen verschobenen Container zurückzusetzen und Bringen Sie es in einen verwendbaren Zustand zurück.

Option ver2, die den Aufruf von clear() für den verschobenen Container beinhaltet, ist ebenfalls gültig. Es kann jedoch zu Optimierungen führen, vorausgesetzt, der verschobene Container ist leer. Durch die Verwendung von clear() wird sichergestellt, dass der Container unabhängig von Optimierungen in einen bekannten Zustand zurückversetzt wird.

Option Version 1, bei der nichts unternommen wird, wird nicht empfohlen. Dies liegt daran, dass sich der Container nach dem Umzug in einem nicht spezifizierten Zustand befindet und möglicherweise unerwartetes Verhalten zeigt.

Das obige ist der detaillierte Inhalt vonWie sollten Sie einen verschobenen C-Container wiederverwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage