มาตรฐานกำหนดสิ่งที่ฉันสามารถทำกับวัตถุได้อย่างแม่นยำเมื่อมันถูกย้ายจากหรือไม่? ฉันเคยคิดว่าทุกสิ่งที่คุณสามารถทำได้ด้วยวัตถุที่ย้ายจากไปนั้นทำลายมัน แต่นั่นก็ไม่เพียงพอ
ตัวอย่างเช่นใช้เทมเพลตฟังก์ชันswap
ตามที่กำหนดไว้ในไลบรารีมาตรฐาน:
template <typename T>
void swap(T& a, T& b)
{
T c = std::move(a); // line 1
a = std::move(b); // line 2: assignment to moved-from object!
b = std::move(c); // line 3: assignment to moved-from object!
}
เห็นได้ชัดว่ามันจะต้องเป็นไปได้ที่จะกำหนดให้กับการย้ายจากวัตถุมิฉะนั้นบรรทัดที่ 2 และ 3 จะล้มเหลว แล้วฉันจะทำยังไงกับวัตถุที่ถูกย้าย? ฉันจะหารายละเอียดเหล่านี้ได้จากที่ไหน?
(อย่างไรก็ตามทำไมมันT c = std::move(a);
แทนT c(std::move(a));
ในบรรทัด 1)
pop_back
แต่แน่นอนคุณจะพบว่าหากมันเป็นvector
empty()