ฉันจะทำ
std::wstringstream temp;
ss.swap(temp);
แก้ไข: แก้ไขข้อผิดพลาดที่รายงานโดย christianparpart และ Nemo ขอบคุณ.
PS: โค้ดด้านบนสร้างออบเจ็กต์สตริงสตรีมใหม่บนสแต็กและสลับทุกอย่างss
กับสิ่งที่อยู่ในอ็อบเจ็กต์ใหม่
ข้อดี:
ss
ตอนนี้การรับประกันจะอยู่ในสถานะใหม่
- อ็อบเจ็กต์ใหม่ถูกสร้างขึ้นแบบอินไลน์และบนสแต็กเพื่อให้คอมไพเลอร์สามารถปรับโค้ดให้เหมาะสมได้อย่างง่ายดาย ในตอนท้ายจะเหมือนกับการรีเซ็ต
ss
ข้อมูลภายในทั้งหมดให้เป็นสถานะเริ่มต้น
มากกว่า:
เมื่อเทียบกับตัวดำเนินการกำหนดวิธีการแลกเปลี่ยน STL อาจเร็วกว่าตัวดำเนินการกำหนดในกรณีที่อ็อบเจ็กต์ใหม่มีบัฟเฟอร์ที่จัดสรรในฮีป ในกรณีเช่นนี้ตัวดำเนินการกำหนดจะต้องจัดสรรบัฟเฟอร์สำหรับออบเจ็กต์ใหม่จากนั้นอาจต้องจัดสรรบัฟเฟอร์อื่นสำหรับอ็อบเจ็กต์เก่าจากนั้นคัดลอกข้อมูลจากบัฟเฟอร์ของอ็อบเจ็กต์ใหม่ไปยังบัฟเฟอร์ใหม่ของอ็อบเจ็กต์เก่า มันง่ายมากที่จะใช้การแลกเปลี่ยนที่รวดเร็วซึ่งเพียงแค่เปลี่ยนพอยน์เตอร์ของบัฟเฟอร์
C ++ 11. ฉันเคยเห็นการใช้งานตัวดำเนินการกำหนดการย้ายที่ช้ากว่าการแลกเปลี่ยนแม้ว่าจะสามารถแก้ไขได้ แต่ผู้พัฒนา STL อาจไม่ต้องการทิ้งวัตถุที่ย้ายพร้อมข้อมูลจำนวนมาก
std::move()
ไม่รับประกันว่าวัตถุที่ย้ายจะว่างเปล่า return std::move(m_container);
ไม่ล้าง m_container ดังนั้นคุณจะต้องทำ
to_return อัตโนมัติ (std :: move (m_container)); m_container.clear (); กลับ to_return;
ซึ่งไม่สามารถดีไปกว่า
auto to_return;
m_container.swap(to_return);
return to_return;
เพราะอย่างหลังรับประกันว่าจะไม่คัดลอกบัฟเฟอร์
ดังนั้นฉันมักจะชอบswap()
ตราบเท่าที่มันพอดี