คำถามติดแท็ก allocator

16
ตัวอย่างที่น่าสนใจของตัวจัดสรร C ++ แบบกำหนดเอง
อะไรคือเหตุผลที่ดีในการทิ้งstd::allocatorโซลูชันที่ปรับแต่งเอง? คุณเคยเจอกับสถานการณ์ที่จำเป็นสำหรับความถูกต้องประสิทธิภาพความสามารถในการปรับขยายและอื่น ๆ หรือไม่? ตัวอย่างที่ฉลาดจริงๆ ตัวจัดสรรแบบกำหนดเองนั้นเป็นคุณสมบัติของไลบรารีมาตรฐานที่ฉันไม่ต้องการมาก ฉันแค่สงสัยว่าคนที่อยู่ใน SO สามารถให้ตัวอย่างที่น่าสนใจเพื่อพิสูจน์การมีอยู่ของพวกเขา

3
polymorphic_allocator: ฉันควรใช้เมื่อใดและทำไม
นี่เป็นวิธีการในcppreference , นี่คือร่างการทำงาน ฉันต้องยอมรับว่าฉันไม่เข้าใจว่าจุดประสงค์ที่แท้จริงคืออะไรpolymorphic_allocatorและเมื่อไหร่ / ทำไม / ฉันควรใช้มันอย่างไร ตัวอย่างเช่นpmr::vectorมีลายเซ็นดังต่อไปนี้: namespace pmr { template <class T> using vector = std::vector<T, polymorphic_allocator<T>>; } อะไรpolymorphic_allocatorข้อเสนอ? std::pmr::vectorข้อเสนออะไรเช่นกันในเรื่องของสมัยเก่าstd::vector? ฉันจะทำอะไรได้บ้างที่ฉันไม่สามารถทำได้จนถึงตอนนี้? วัตถุประสงค์ที่แท้จริงของผู้จัดสรรนั้นคืออะไรและเมื่อใดที่ฉันควรใช้จริง?
122 c++  allocator  c++17 

3
deleter ของ shared_ptr ถูกเก็บไว้ในหน่วยความจำที่จัดสรรโดยตัวจัดสรรที่กำหนดเองหรือไม่
บอกว่าผมมีshared_ptrกับการจัดสรรที่กำหนดเองและ Deleter ที่กำหนดเอง ฉันไม่สามารถหาอะไรในมาตรฐานที่พูดถึงว่าควรเก็บ deleter ที่ไหน: ไม่ได้บอกว่าตัวจัดสรรแบบกำหนดเองจะถูกใช้สำหรับหน่วยความจำของ deleter และมันไม่ได้บอกว่ามันจะไม่เป็นเช่นนั้น สิ่งนี้ไม่ได้ระบุหรือฉันเพิ่งจะพลาดบางสิ่ง

1
ความแตกต่างระหว่าง alloctaor :: construct ที่เก่ากว่าและตัวสร้างใหม่และตัวสร้างที่ชัดเจนคืออะไร
ฉันรู้ว่าstd::allocator<T>::constructใช้พารามิเตอร์เพียงสองตัวใน C ++ รุ่นเก่ากว่า; ตัวแรกคือตัวชี้ไปยังหน่วยความจำที่ไม่ได้สร้างขึ้นซึ่งเราต้องการสร้างวัตถุประเภทTและอันที่สองคือค่าของประเภทองค์ประกอบเพื่อเริ่มต้นวัตถุนั้น ดังนั้นตัวสร้างตัวสร้างจึงถูกเรียกใช้: struct Foo { Foo(int, int) { cout << "Foo(int, int)" << endl; } /*explicit*/ Foo(int) { cout << "Foo(int)" << endl; } Foo(const Foo&) { cout << "Foo(const Foo&)" << endl; } }; int main(int argc, char* argv[]) { allocator<Foo> a; Foo* const p …
15 c++  allocator 

2
ฉันสามารถใช้ตัวจัดสรรที่กำหนดเองสำหรับ std :: array สำหรับคีย์การเข้ารหัสที่ปลอดภัยได้หรือไม่
ฉันรู้ว่าstd::arrayจัดสรรอย่างสมบูรณ์ในสแต็ก แต่คำถามนี้ได้รับแรงบันดาลใจจากความกังวลด้านความปลอดภัยที่ต้องการสองสิ่ง: ข้อมูลในstd::arrayจะถูก zerod หรือสุ่มเมื่อถูกทำลาย ข้อมูลในstd::arrayจะถูกล็อคเพื่อไม่ให้ไปที่ดิสก์ไม่ว่าจะเกิดข้อผิดพลาดหรือในหน่วยความจำสลับ มักจะมีstd::vectorวิธีการแก้ปัญหาคือการสร้างจัดสรรที่กำหนดเองที่ทำสิ่งเหล่านี้ อย่างไรก็ตามสำหรับstd::arrayฉันไม่เห็นวิธีการทำเช่นนี้และด้วยเหตุนี้คำถามนี้ สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือ: template <typename T, std::size_t Size> struct SecureArray : public std::array<T, Size> { static_assert(std::is_pod<T>::value, "Only POD types allowed") static_assert(sizeof(T) == 1, "Only 1-byte types allowed") virtual ~SecureArray() { std::vector<uint8_t> d = RandomBytes(Size); // generates Size random bytes std::memcpy(this->data(), d.data(), Size); } } …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.