คำถามติดแท็ก copy-and-swap

5
สำนวนคัดลอกและแลกเปลี่ยนคืออะไร?
สำนวนนี้คืออะไรและควรใช้เมื่อใด ปัญหาอะไรที่แก้ได้? สำนวนเปลี่ยนไปเมื่อใช้ C ++ 11 หรือไม่? แม้ว่ามันจะถูกกล่าวถึงในหลาย ๆ ที่ แต่เราก็ไม่มีคำถามและคำตอบว่า "มันคืออะไร" มันจึงเป็นเช่นนี้ นี่คือรายการบางส่วนของสถานที่ที่เคยกล่าวถึง: สำนวนการเข้ารหัส C ++ ที่คุณชื่นชอบคืออะไร: Copy-swap คัดลอกคอนสตรัคเตอร์และ = ตัวดำเนินการโอเวอร์โหลดใน C ++: เป็นฟังก์ชั่นทั่วไปที่เป็นไปได้หรือไม่? การคัดลอกข้อมูลคืออะไรและจะเพิ่มประสิทธิภาพสำนวนการคัดลอกและสลับ C ++: การจัดสรรอาเรย์ของวัตถุแบบไดนามิกหรือไม่?

2
ฟังก์ชั่นการแลกเปลี่ยนเพื่อนสาธารณะ
ในคำตอบที่สวยงามของcopy-and-swap-idiomมีโค้ดบางส่วนที่ฉันต้องการความช่วยเหลือเล็กน้อย: class dumb_array { public: // ... friend void swap(dumb_array& first, dumb_array& second) // nothrow { using std::swap; swap(first.mSize, second.mSize); swap(first.mArray, second.mArray); } // ... }; และเขาเพิ่มบันทึก มีการอ้างสิทธิ์อื่น ๆ ที่เราควรชำนาญ std :: swap สำหรับประเภทของเราให้การแลกเปลี่ยนในชั้นเรียนพร้อมการแลกเปลี่ยนฟังก์ชั่นฟรีเป็นต้น แต่สิ่งนี้ไม่จำเป็นทั้งหมด: การใช้ swap ที่เหมาะสมจะต้องผ่านการโทรที่ไม่มีเงื่อนไข และฟังก์ชั่นของเราจะพบผ่าน ADL ฟังก์ชั่นหนึ่งจะทำ เนื่องจากfriendฉันใช้คำศัพท์ที่ "ไม่เป็นมิตร" ฉันต้องยอมรับ ดังนั้นคำถามหลักของฉันคือ: ดูเหมือนว่าฟังก์ชั่นฟรีแต่ภายในร่างกายของคลาส? ไม่ได้เป็นเหตุผลนี้swapคง ? เห็นได้ชัดว่ามันไม่ได้ใช้ตัวแปรสมาชิกใด ๆ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.