Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

กฎสามข้อเทียบกับกฎข้อที่ห้าใน C ++?


กฎสามข้อเป็นกฎง่ายๆ เมื่อใช้ C++ นี่เป็นแนวปฏิบัติที่ดีที่บอกว่าถ้าชั้นเรียนของคุณต้องการสิ่งใด

  • ตัวสร้างการคัดลอก
  • ผู้ดำเนินการมอบหมาย
  • หรือผู้ทำลาย

กำหนดไว้อย่างชัดเจนจึงมีแนวโน้มว่าจะต้องใช้ทั้งสามอย่าง

ทำไมถึงเป็นเช่นนี้? เป็นเพราะถ้าชั้นเรียนของคุณต้องการสิ่งใดๆ ข้างต้น มันคือการจัดการทรัพยากรที่จัดสรรแบบไดนามิกและอาจต้องใช้ทรัพยากรอื่นเพื่อให้บรรลุเป้าหมายนั้นได้สำเร็จ ตัวอย่างเช่น หากคุณต้องการตัวดำเนินการมอบหมาย คุณจะต้องสร้างสำเนาของอ็อบเจ็กต์ที่กำลังถูกคัดลอกโดยการอ้างอิง ดังนั้นจึงจัดสรรทรัพยากร คุณจะต้องใช้ตัวสร้างการคัดลอกสำหรับการคัดลอกและตัวทำลายเพื่อเพิ่มทรัพยากรเหล่านี้

กฎห้าข้อเป็นส่วนเสริมของกฎสามข้อเนื่องจากมีการแนะนำความหมายการย้ายใน C++11 กฎห้าข้อยังใช้ใน C ++ สำหรับการจัดการทรัพยากร กฎนี้อาจขจัดการรั่วไหลของหน่วยความจำและปัญหาอื่นๆ ในโค้ด C++ กฎของ The Big Five ระบุว่า หากคุณต้องเขียนหนึ่งในหน้าที่ต่อไปนี้ คุณต้องมีนโยบายสำหรับฟังก์ชันเหล่านี้ทั้งหมด หากเรามี Object Foo เราก็สามารถมี FooManager ที่จัดการ Foo ทรัพยากรได้ เมื่อใช้งาน FooManager คุณอาจต้องใช้ฟังก์ชันต่อไปนี้ทั้งหมด -

  • destructor - เมื่อผู้จัดการคนนี้ไม่อยู่ในขอบเขต มันควรจะปล่อยทรัพยากรทั้งหมดที่มันจัดการอยู่

  • ตัวดำเนินการมอบหมาย - หากคุณไม่ได้จัดเตรียมไว้ คอมไพเลอร์จะสร้างตัวดำเนินการมอบหมายเริ่มต้น การดำเนินการกำหนดเริ่มต้นเป็นฟังก์ชันคัดลอกแบบสมาชิกและจะทำสำเนาแบบตื้นและไม่ใช่แบบลึก ซึ่งอาจทำให้เกิดปัญหา เช่น หน่วยความจำรั่ว การมอบหมายผิด

  • ตัวสร้างการคัดลอก - ตัวสร้างสำเนาที่คอมไพเลอร์ให้มาจะทำสำเนาที่ชาญฉลาดของสมาชิกทั้งหมดของแอตทริบิวต์ FooManagers สิ่งนี้ทำให้เกิดปัญหาเช่นเดียวกับผู้ดำเนินการมอบหมาย

  • ตัวสร้างการย้าย - การคัดลอกวัตถุอาจมีราคาแพงเนื่องจากเกี่ยวข้องกับการสร้าง คัดลอก และทำลายวัตถุชั่วคราว C++11 นำเสนอแนวคิดของการอ้างอิงค่า r การอ้างอิงค่า r สามารถผูกไว้กับค่า r ได้อย่างชัดเจน ค่า r เป็นอ็อบเจ็กต์ที่ไม่มีชื่อ วัตถุชั่วคราวกล่าวอีกนัยหนึ่ง การอ้างอิงค่า r นี้สามารถใช้ในคอนสตรัคเตอร์เพื่อสร้างการอ้างอิงไปยังค่า r ที่ส่งผ่านไปยังมัน

  • ตัวสร้างการย้าย - การคัดลอกวัตถุอาจมีราคาแพงเนื่องจากเกี่ยวข้องกับการสร้าง คัดลอก และทำลายวัตถุชั่วคราว C++11 นำเสนอแนวคิดของการอ้างอิงค่า r การอ้างอิงค่า r สามารถผูกไว้กับค่า r ได้อย่างชัดเจน ค่า r เป็นอ็อบเจ็กต์ที่ไม่มีชื่อ วัตถุชั่วคราวกล่าวอีกนัยหนึ่ง การอ้างอิงค่า r นี้สามารถใช้ในคอนสตรัคเตอร์เพื่อสร้างการอ้างอิงไปยังค่า r ที่ส่งผ่านไปยังมัน

  • ย้ายผู้ดำเนินการมอบหมาย - เป็นประโยชน์ที่จะมีเพียงหนึ่งทรัพยากรในแต่ละครั้ง ความเป็นเจ้าของของทรัพยากรนี้สามารถโอนจากผู้จัดการคนหนึ่งไปยังอีกคนหนึ่งได้ ในกรณีดังกล่าว คุณจะระบุตัวดำเนินการมอบหมายการย้ายได้

นี่เป็นแหล่งข้อมูลที่ดีเยี่ยมสำหรับการเรียนรู้เกี่ยวกับกฎห้าประการ – https://www.feabhas.com/sites/default/files/2016-06/Rule%20of%20the%20Big%20Five.pdf