C ++ เป็นข้อมูลเกี่ยวกับหน่วยความจำที่เป็นเจ้าของ - aka ความหมายเป็นเจ้าของ
เป็นความรับผิดชอบของเจ้าของหน่วยความจำที่จัดสรรแบบไดนามิกเพื่อปลดปล่อยหน่วยความจำนั้น ดังนั้นคำถามจึงกลายเป็นว่าใครเป็นเจ้าของความทรงจำ
ในความเป็นเจ้าของ C ++ จะถูกบันทึกโดยชนิดที่ตัวชี้ดิบถูกห่อไว้ภายในดังนั้นในโปรแกรม C ++ ที่ดี (IMO) จึงหายากมาก ( หายากไม่ใช่ไม่เคย ) ที่จะเห็นตัวชี้ดิบที่ส่งผ่านไปรอบ ๆ (เนื่องจากตัวชี้ดิบไม่มีการอนุมานความเป็นเจ้าของดังนั้นเราจึงสามารถ อย่าบอกว่าใครเป็นเจ้าของหน่วยความจำดังนั้นหากไม่ได้อ่านเอกสารอย่างรอบคอบคุณจะไม่สามารถบอกได้ว่าใครเป็นผู้รับผิดชอบในการเป็นเจ้าของ)
ในทางกลับกันเป็นเรื่องยากที่จะเห็นตัวชี้ดิบที่เก็บไว้ในคลาสแต่ละตัวชี้ดิบจะถูกเก็บไว้ในกระดาษห่อตัวชี้อัจฉริยะของตัวเอง ( หมายเหตุ:หากคุณไม่ได้เป็นเจ้าของวัตถุคุณไม่ควรเก็บไว้เพราะคุณไม่สามารถรู้ได้ว่าเมื่อไรที่มันจะออกนอกขอบเขตและถูกทำลาย)
ดังนั้นคำถาม:
- ผู้คนมีความหมายเกี่ยวกับความเป็นเจ้าของประเภทใด
- คลาสมาตรฐานใดบ้างที่ใช้ในการนำความหมายเหล่านั้นไปใช้
- คุณคิดว่ามันมีประโยชน์ในสถานการณ์ใดบ้าง?
ให้เก็บประเภทการเป็นเจ้าของทางความหมายไว้ 1 ประเภทต่อคำตอบเพื่อให้สามารถโหวตขึ้นและลงทีละรายการได้
สรุป:
ตามแนวคิดแล้วตัวชี้ที่ชาญฉลาดนั้นเรียบง่ายและการนำไปใช้อย่างไร้เดียงสาทำได้ง่าย ฉันได้เห็นการพยายามใช้งานหลายครั้ง แต่มักจะใช้งานไม่ได้ในลักษณะบางอย่างที่ไม่ชัดเจนสำหรับการใช้งานทั่วไปและตัวอย่าง ดังนั้นฉันขอแนะนำให้ใช้ตัวชี้อัจฉริยะที่ผ่านการทดสอบอย่างดีจากไลบรารีแทนที่จะหมุนตัวเอง std::auto_ptr
หรือหนึ่งในตัวชี้สมาร์ท Boost ดูเหมือนจะครอบคลุมทุกความต้องการของฉัน
std::auto_ptr<T>
:
คนเดียวเป็นเจ้าของวัตถุ อนุญาตให้โอนความเป็นเจ้าของได้
การใช้งาน: ช่วยให้คุณกำหนดอินเทอร์เฟซที่แสดงการโอนความเป็นเจ้าของอย่างชัดเจน
boost::scoped_ptr<T>
คนเดียวเป็นเจ้าของวัตถุ ไม่อนุญาตให้โอนความเป็นเจ้าของ
การใช้งาน: ใช้เพื่อแสดงความเป็นเจ้าของอย่างชัดเจน วัตถุจะถูกทำลายโดย destructor หรือเมื่อรีเซ็ตอย่างชัดเจน
boost::shared_ptr<T>
( std::tr1::shared_ptr<T>
)
การเป็นเจ้าของหลายรายการ นี่คือตัวชี้การนับอ้างอิงแบบธรรมดา เมื่อจำนวนอ้างอิงถึงศูนย์วัตถุจะถูกทำลาย
การใช้งาน: เมื่อออบเจ็กต์สามารถมีหลายตัวที่มีอายุการใช้งานซึ่งไม่สามารถกำหนดได้ในเวลาคอมไพล์
boost::weak_ptr<T>
:
ใช้กับshared_ptr<T>
สถานการณ์ที่อาจเกิดวงจรของพอยน์เตอร์
การใช้งาน: ใช้เพื่อหยุดรอบจากการรักษาวัตถุเมื่อมีเพียงรอบนั้นเท่านั้นที่รักษาจำนวนอ้างอิงที่ใช้ร่วมกัน
In C++ ownership is documented by the type a RAW pointer is wrapped inside thus in a good (IMO)
สามารถเปลี่ยนวลีนี้ได้หรือไม่? ฉันไม่เข้าใจเลย
In C++ ownership is documented by the type a RAW pointer is wrapped inside thus in a good C++ program it is very rare to see RAW pointers passed around
. ตัวชี้ RAW ไม่มีความหมายความเป็นเจ้าของ หากคุณไม่รู้จักเจ้าของคุณไม่ทราบว่าใครเป็นผู้รับผิดชอบในการลบวัตถุมีคลาสมาตรฐานหลายคลาสที่ใช้ในการตัดพอยน์เตอร์ (std :: shared_ptr, std :: unique_ptr ฯลฯ ) ที่กำหนดความเป็นเจ้าของดังนั้น กำหนดว่าใครเป็นผู้รับผิดชอบในการลบตัวชี้