คำถามติดแท็ก unique-ptr

std :: unique_ptr เป็นสมาร์ทพอยน์เตอร์ที่รักษาความเป็นเจ้าของอ็อบเจ็กต์ แต่เพียงผู้เดียวผ่านตัวชี้ unique_ptr ไม่สามารถคัดลอกหรือกำหนดสำเนาได้ unique_ptr สองอินสแตนซ์ไม่สามารถจัดการอ็อบเจ็กต์เดียวกันได้

7
ฉันจะส่ง std :: unique_ptr ไปยังฟังก์ชันได้อย่างไร
ฉันจะส่งผ่านstd::unique_ptrเข้าสู่ฟังก์ชันได้อย่างไร? บอกว่าฉันมีคลาสต่อไปนี้: class A { public: A(int val) { _val = val; } int GetVal() { return _val; } private: int _val; }; ต่อไปนี้ไม่ได้รวบรวม: void MyFunc(unique_ptr<A> arg) { cout << arg->GetVal() << endl; } int main(int argc, char* argv[]) { unique_ptr<A> ptr = unique_ptr<A>(new A(1234)); MyFunc(ptr); return 0; } เหตุใดฉันจึงไม่สามารถส่งผ่านstd::unique_ptrเข้าสู่ฟังก์ชันได้ …
97 c++  c++11  unique-ptr 

4
วิธีการประกาศ std :: unique_ptr และการใช้งานคืออะไร?
ฉันพยายามที่จะเข้าใจวิธีstd::unique_ptrการทำงานและการที่ผมพบนี้เอกสาร ผู้เขียนเริ่มจากตัวอย่างต่อไปนี้: #include <utility> //declarations of unique_ptr using std::unique_ptr; // default construction unique_ptr<int> up; //creates an empty object // initialize with an argument unique_ptr<int> uptr (new int(3)); double *pd= new double; unique_ptr<double> uptr2 (pd); // overloaded * and -> *uptr2 = 23.5; unique_ptr<std::string> ups (new std::string("hello")); int len=ups->size(); สิ่งที่ทำให้ฉันสับสนคือในบรรทัดนี้ unique_ptr<int> …
95 c++  pointers  std  unique-ptr 

6
ข้อผิดพลาด :: make_unique ไม่ใช่สมาชิกของ 'std'
ฉันกำลังพยายามรวบรวมโปรแกรมเธรดพูลต่อไปนี้ที่โพสต์ในการตรวจสอบโค้ดเพื่อทดสอบ /codereview/55100/platform-independant-thread-pool-v4 แต่ฉันได้รับข้อผิดพลาด threadpool.hpp: In member function ‘std::future<decltype (task((forward<Args>)(args)...))> threadpool::enqueue_task(Func&&, Args&& ...)’: threadpool.hpp:94:28: error: ‘make_unique’ was not declared in this scope auto package_ptr = make_unique<task_package_impl<R, decltype(bound_task)>> (std::move(bound_task), std::move(promise)); ^ threadpool.hpp:94:81: error: expected primary-expression before ‘>’ token auto package_ptr = make_unique<task_package_impl<R, decltype(bound_task)>>(std::move(bound_task), std::move(promise)); ^ main.cpp: In function ‘int main()’: main.cpp:9:17: error: …

4
เหตุใดจึงสามารถส่ง T * ในการลงทะเบียน แต่ unique_ptr <T> ไม่สามารถทำได้?
ฉันกำลังดูการสนทนาของ Chandler Carruth ใน CppCon 2019: ไม่มี Abstractions Zero-Cost ในนั้นเขาให้ตัวอย่างของวิธีการที่เขารู้สึกประหลาดใจเพียงเท่าใดค่าใช้จ่ายที่คุณเกิดขึ้นโดยใช้std::unique_ptr&lt;int&gt;มากกว่าint*; ส่วนนั้นเริ่มต้นที่เวลา 17:25 น คุณสามารถดูผลการรวบรวมตัวอย่างของคู่ของเขา (godbolt.org) - เพื่อเป็นพยานว่าที่จริงดูเหมือนว่าคอมไพเลอร์ไม่เต็มใจที่จะผ่านค่า unique_ptr - ซึ่งในความเป็นจริงในบรรทัดล่างคือ เพียงที่อยู่ - ภายในการลงทะเบียนเท่านั้นในหน่วยความจำแบบตรง หนึ่งในประเด็นที่นายคาร์รั ธ ทำเวลาประมาณ 27:00 น. คือ C ++ ABI ต้องการพารามิเตอร์ตามค่า (บางส่วน แต่ไม่ใช่ทั้งหมดบางทีอาจเป็น - ประเภทที่ไม่ใช่แบบดั้งเดิมหรือไม่ใช่ประเภทที่ไม่สามารถแก้ไขได้) จะถูกส่งผ่านในหน่วยความจำ มากกว่าภายในทะเบียน คำถามของฉัน: นี่เป็นข้อกำหนดของ ABI ในบางแพลตฟอร์มหรือไม่ (อันไหน) หรือบางทีมันอาจเป็นเพียงการมองโลกในแง่ร้ายในบางสถานการณ์? เหตุใด ABI จึงเป็นเช่นนั้น นั่นคือถ้าเขตข้อมูลของโครงสร้าง / …

3
เหตุใดจึงทำให้ unique_ptr <Derived> ส่งไปยัง unique_ptr <Base> โดยปริยาย
ฉันเขียนรหัสต่อไปนี้ซึ่งใช้ในunique_ptr&lt;Derived&gt;ที่ที่unique_ptr&lt;Base&gt;คาดไว้ class Base { int i; public: Base( int i ) : i(i) {} int getI() const { return i; } }; class Derived : public Base { float f; public: Derived( int i, float f ) : Base(i), f(f) {} float getF() const { return f; } }; void …

3
การคืนค่าตัวชี้โมฆะที่ไม่ซ้ำใครจากฟังก์ชั่น
ในการรับvoid *ฟังก์ชั่นใน CI จะทำสิ่งนี้ (ตัวอย่างพื้นฐานมาก): void *get_ptr(size_t size) { void *ptr = malloc(size); return ptr; } ฉันจะได้ผลลัพธ์เดียวกันเมื่อใช้งานได้std::unique_ptr&lt;&gt;อย่างไร
11 c++  c  unique-ptr 

3
unique_ptr <0 หรือผู้ปฏิบัติงานทำอะไรน้อยกว่า
ฉันกำลังจัดการกับรหัสที่ฉันไม่ได้เขียน ฉันมีคำสั่งนี้: // p is type of std::unique_ptr&lt;uint8_t[]&gt; if (p &lt; 0) { /* throw an exception */ } ดังนั้นp &lt; 0ในบริบทนี้หมายความว่าอย่างไร บนหน้าเอกสารผมเชื่อว่ากรณีของฉันเป็น16) y &lt; nullptrที่เป็น0nullptr แต่มันจะทำอะไร?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.