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

8
กฎของสามคืออะไร
อะไรคัดลอกวัตถุหมายถึง? ตัวสร้างสำเนาและตัวดำเนินการกำหนดค่าการคัดลอกคืออะไร ฉันต้องประกาศตัวเองเมื่อใด ฉันจะป้องกันไม่ให้คัดลอกวัตถุของฉันได้อย่างไร

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

3
ปิดใช้งานตัวสร้างสำเนา
ฉันมีชั้นเรียน: class SymbolIndexer { protected: SymbolIndexer ( ) { } public: static inline SymbolIndexer & GetUniqueInstance ( ) { static SymbolIndexer uniqueinstance_ ; return uniqueinstance_ ; } }; ฉันจะแก้ไขเพื่อปิดการใช้งานรหัสเช่น: SymbolIndexer symbol_indexer_ = SymbolIndexer::GetUniqueInstance ( ); และอนุญาตเฉพาะรหัสเช่น: SymbolIndexer & ref_symbol_indexer_ = SymbolIndexer::GetUniqueInstance ( );

3
เงื่อนไขสำหรับการสร้าง ctor เริ่มต้น / คัดลอก / ย้ายอัตโนมัติและตัวดำเนินการกำหนดสำเนา / ย้าย?
ฉันต้องการรีเฟรชหน่วยความจำของฉันตามเงื่อนไขที่คอมไพลเลอร์มักสร้างตัวสร้างเริ่มต้นตัวสร้างการคัดลอกและตัวดำเนินการกำหนดโดยอัตโนมัติ ฉันจำได้ว่ามีกฎบางอย่าง แต่ฉันจำไม่ได้และยังไม่พบแหล่งข้อมูลที่มีชื่อเสียงทางออนไลน์ ใครสามารถช่วย?

7
เราต้องใช้ตัวสร้างสำเนาเมื่อใด
ฉันรู้ว่าคอมไพเลอร์ C ++ สร้างตัวสร้างการคัดลอกสำหรับคลาส ในกรณีใดที่เราต้องเขียนตัวสร้างสำเนาที่ผู้ใช้กำหนดเอง คุณสามารถยกตัวอย่างได้หรือไม่?

3
Copy constructor และ = operator overload ใน C ++: เป็นฟังก์ชันทั่วไปที่เป็นไปได้หรือไม่?
ตั้งแต่ตัวสร้างสำเนา MyClass(const MyClass&); และตัวดำเนินการ = โอเวอร์โหลด MyClass& operator = (const MyClass&); มีรหัสเดียวกันพารามิเตอร์เดียวกันและแตกต่างกันเพียงแค่ผลตอบแทนเป็นไปได้ไหมที่จะมีฟังก์ชันทั่วไปให้ทั้งคู่ใช้?

4
คัดลอก structs กับสมาชิกที่ไม่ได้กำหนดค่าเริ่มต้น
มันถูกต้องหรือไม่ที่จะคัดลอก struct ที่สมาชิกบางคนไม่ได้เริ่มต้น? ฉันสงสัยว่ามันเป็นพฤติกรรมที่ไม่ได้กำหนด แต่ถ้าเป็นเช่นนั้นมันจะทำให้สมาชิกที่ไม่ได้กำหนดค่าเริ่มต้นในโครงสร้าง (แม้ว่าสมาชิกเหล่านั้นจะไม่เคยใช้งานโดยตรง) ค่อนข้างอันตราย ดังนั้นฉันสงสัยว่ามีบางอย่างในมาตรฐานที่อนุญาตหรือไม่ เช่นนี้ถูกต้องหรือไม่ struct Data { int a, b; }; int main() { Data data; data.a = 5; Data data2 = data; }

2
ฉันจะคัดลอกคอลเลกชันอย่างปลอดภัยได้อย่างไร
ในอดีตฉันได้กล่าวว่าการคัดลอกคอลเลกชันอย่างปลอดภัยทำบางสิ่งเช่น: public static void doThing(List<String> strs) { List<String> newStrs = new ArrayList<>(strs); หรือ public static void doThing(NavigableSet<String> strs) { NavigableSet<String> newStrs = new TreeSet<>(strs); แต่ตัวสร้าง "สำเนา" เหล่านี้มีวิธีการสร้างและสตรีมแบบสแตติกที่คล้ายกันปลอดภัยจริงๆและมีการระบุกฎไว้ที่ไหนบ้าง โดยความปลอดภัยฉันหมายถึงการรับประกันความสมบูรณ์แบบพื้นฐานทางความหมายของภาษาจาวาและคอลเลกชันที่บังคับใช้กับผู้โทรที่เป็นอันตรายโดยสมมติว่าได้รับการสนับสนุนจากเหตุผลที่สมเหตุสมผลSecurityManagerและไม่มีข้อบกพร่องใด ๆ ฉันมีความสุขด้วยวิธีการขว้างปาConcurrentModificationException, NullPointerException, IllegalArgumentException, ClassCastExceptionฯลฯ หรือบางทีอาจจะแขวน ฉันได้เลือกStringเป็นตัวอย่างของการโต้แย้งประเภทไม่เปลี่ยนรูป สำหรับคำถามนี้ฉันไม่สนใจสำเนาชุดลึกสำหรับคอลเล็กชั่นที่ไม่แน่นอนซึ่งมี gotchas ของตัวเอง (เพื่อความชัดเจนฉันได้ดูซอร์สโค้ด OpenJDK และมีคำตอบบางอย่างสำหรับArrayListและTreeSet.)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.