util.smartptr.shared.const / 9 ใน C ++ 11:
ผลกระทบ: โครงสร้างวัตถุ shared_ptr ที่เป็นเจ้าของวัตถุ p และ deleter d Constructor ที่สองและสี่จะใช้สำเนาของ a เพื่อจัดสรรหน่วยความจำสำหรับใช้ภายใน
ตัวสร้างที่สองและสี่มีต้นแบบเหล่านี้:
template<class Y, class D, class A> shared_ptr(Y* p, D d, A a);
template<class D, class A> shared_ptr(nullptr_t p, D d, A a);
ในฉบับร่างล่าสุด util.smartptr.shared.const / 10 นั้นเทียบเท่ากับจุดประสงค์ของเรา:
ผลกระทบ: โครงสร้างวัตถุ shared_ptr ที่เป็นเจ้าของวัตถุ p และ deleter d เมื่อ T ไม่ใช่ประเภทอาเรย์คอนสตรัคเตอร์ตัวแรกและตัวที่สองจะเปิดใช้งาน shared_from_this ด้วย p Constructor ที่สองและสี่จะใช้สำเนาของ a เพื่อจัดสรรหน่วยความจำสำหรับใช้ภายใน หากมีข้อผิดพลาดเกิดขึ้นจะเรียกว่า d (p)
ดังนั้นตัวจัดสรรจะถูกใช้หากจำเป็นต้องจัดสรรในหน่วยความจำที่จัดสรร ขึ้นอยู่กับมาตรฐานปัจจุบันและรายงานข้อบกพร่องที่เกี่ยวข้องการจัดสรรไม่ได้บังคับ แต่คณะกรรมการสันนิษฐาน
แม้ว่าอินเทอร์เฟซของshared_ptr
อนุญาตการใช้งานที่ไม่เคยมีบล็อกควบคุมและทั้งหมดshared_ptr
และweak_ptr
ใส่ไว้ในรายการที่เชื่อมโยง แต่ไม่มีการนำไปใช้ในทางปฏิบัติ นอกจากนี้การใช้ถ้อยคำได้รับการแก้ไขเช่นสมมติว่าuse_count
มีการแบ่งปัน
เดลเตอร์จำเป็นต้องเคลื่อนย้ายที่สามารถสร้างได้เท่านั้น shared_ptr
ดังนั้นจึงเป็นไปไม่ได้ที่จะมีหลายชุดใน
หนึ่งสามารถจินตนาการการใช้งานที่ทำให้ deleter ในการออกแบบเป็นพิเศษshared_ptr
และย้ายมันเมื่อมันshared_ptr
ถูกลบพิเศษ ในขณะที่การใช้งานดูเหมือนเป็นไปตามมาตรฐานมันก็แปลกโดยเฉพาะอย่างยิ่งเนื่องจากอาจจำเป็นต้องใช้บล็อกควบคุมสำหรับการนับการใช้งาน (อาจเป็นไปได้
DR ที่เกี่ยวข้องที่ฉันพบ: 545 , 575 , 2434 (ซึ่งยอมรับว่าการใช้งานทั้งหมดกำลังใช้บล็อกควบคุมและดูเหมือนจะบ่งบอกว่าข้อ จำกัด หลายเธรดค่อนข้างได้รับคำสั่ง), 2802 (ซึ่งต้องการให้ deleter ย้ายเท่านั้นที่สามารถสร้างได้ deleter จะถูกคัดลอกระหว่างหลายshared_ptr
รายการ