นายLidströmและฉันมีข้อโต้แย้ง :)
คำกล่าวอ้างของMr.Lidströmคือโครงสร้างshared_ptr<Base> p(new Derived);
ไม่ต้องการให้ Base มีตัวทำลายเสมือน:
Armen Tsirunyan : "จริงเหรอshared_ptr จะล้างข้อมูลอย่างถูกต้องหรือไม่ในกรณีนี้คุณช่วยสาธิตวิธีการใช้เอฟเฟกต์นั้นได้ไหม"
Daniel Lidström : " shared_ptrใช้ตัวทำลายของตัวเองเพื่อลบอินสแตนซ์คอนกรีตสิ่งนี้เรียกว่า RAII ในชุมชน C ++ คำแนะนำของฉันคือคุณเรียนรู้ทุกอย่างเกี่ยวกับ RAII มันจะทำให้การเข้ารหัส C ++ ของคุณง่ายขึ้นมากเมื่อคุณใช้ RAII ในทุกสถานการณ์ "
Armen Tsirunyan : "ฉันรู้เกี่ยวกับ RAII และฉันก็รู้ด้วยว่าในที่สุดตัวทำลายshared_ptrอาจลบ px ที่เก็บไว้เมื่อ pn ถึง 0 แต่ถ้า px มีตัวชี้ประเภทคงที่
Base
และตัวชี้ชนิดไดนามิกเป็นDerived
ดังนั้นเว้นแต่จะBase
มีตัวทำลายเสมือน จะส่งผลให้เกิดพฤติกรรมที่ไม่ได้กำหนดแก้ไขฉันถ้าฉันทำผิด "Daniel Lidström : " shared_ptrรู้ว่าประเภทคงที่คือคอนกรีตมันรู้เรื่องนี้ตั้งแต่ฉันส่งผ่านมันไปในตัวสร้างมันดูเหมือนเวทมนตร์เล็กน้อย แต่ฉันมั่นใจได้ว่ามันเป็นเพราะการออกแบบและดีมาก"
ดังนั้นตัดสินเรา เป็นไปได้อย่างไร (ถ้าเป็น) ที่จะใช้shared_ptrโดยไม่ต้องใช้คลาส polymorphic ที่มีตัวทำลายเสมือน ขอบคุณล่วงหน้า