Wiederverwendung eines verschobenen Containers: Erkundung des C 0x-Standardentwurfs
Mit der vorliegenden Frage soll die richtige Methode zur Wiederverwendung eines verschobenen Containers geklärt werden in C. Gemäß dem C 0x-Standardentwurf erlaubt ein Objekt in einem „gültigen, aber nicht spezifizierten Zustand“ Operationen, die keine Vorbedingungen erfordern, es sei denn, diese Vorbedingungen werden zuerst überprüft.
Beachten Sie den bereitgestellten Codeausschnitt:
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
Der Vektorcontainer wird in Container2 verschoben, sodass der Container in einem nicht spezifizierten Zustand verbleibt. Laut Norm erlaubt dieser Zustand den Betrieb ohne Vorbedingungen. Daher wird der Aufruf von „clear“ für Container2 (Version 2) ihn in einen bekannten Zustand zurückversetzen.
Alternativ führt auch die Neuinitialisierung des Containers mit Version 3 zum gewünschten Ergebnis. Diese Methode ist etwas umständlicher, ermöglicht jedoch eine potenzielle Optimierung. Allerdings kann es auch zu Fehlern kommen.
Daher besteht die richtige Methode zur Wiederverwendung eines verschobenen Containers darin, ihn entweder zu löschen oder neu zu initialisieren. Version 2 wird bevorzugt, da sie den Container explizit auf einen bekannten Zustand zurücksetzt und potenzielle Fallstricke im Zusammenhang mit Version 3 vermeidet.
Das obige ist der detaillierte Inhalt vonWie kann ein verschobener Container in C 0x sicher wiederverwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!