4
เหตุใดจึงไม่มีการกำหนดค่าการย้าย / ย้ายตัวสร้างเริ่มต้น
ฉันเป็นโปรแกรมเมอร์ธรรมดา ๆ ตัวแปรสมาชิกชั้นเรียนของฉันส่วนใหญ่มักประกอบด้วยประเภท POD และ STL-container ด้วยเหตุนี้ฉันจึงแทบไม่ต้องเขียนตัวดำเนินการกำหนดหรือคัดลอกตัวสร้างเนื่องจากจะใช้งานโดยค่าเริ่มต้น เพิ่มสิ่งนี้ถ้าฉันใช้std::moveกับวัตถุที่ไม่สามารถเคลื่อนย้ายได้มันจะใช้ตัวดำเนินการกำหนดหมายความว่าstd::moveปลอดภัยอย่างสมบูรณ์ เนื่องจากฉันเป็นโปรแกรมเมอร์ธรรมดาฉันจึงต้องการใช้ประโยชน์จากความสามารถในการย้ายโดยไม่ต้องเพิ่มตัวสร้างการย้าย / ตัวดำเนินการกำหนดให้กับทุกชั้นเรียนที่ฉันเขียนเนื่องจากคอมไพเลอร์สามารถนำไปใช้เป็น " this->member1_ = std::move(other.member1_);..." แต่มันไม่มี (อย่างน้อยก็ไม่ใช่ใน Visual 2010) มีเหตุผลพิเศษสำหรับสิ่งนี้หรือไม่? ที่สำคัญกว่า; มีวิธีใดบ้างที่จะหลีกเลี่ยงสิ่งนี้? อัปเดต: หากคุณมองลงไปที่คำตอบของ GManNickG เขาให้มาโครที่ยอดเยี่ยมสำหรับสิ่งนี้ และหากคุณไม่ทราบหากคุณใช้การย้ายความหมายคุณสามารถลบฟังก์ชัน swap member ได้