如何取得std :: unique_ptr和std :: shared_ptr的所有权

时间:2015-10-30 05:14:31

标签: c++ c++11 memory-management shared-ptr unique-ptr

这是GNU Make的后续问题。

我们如何取得std :: unique_ptr或std :: shared_ptr的所有权?

有没有办法让class A{ public: A() { b = std::unique_ptr<char[]>(new char[100] { 0 }); } char* b; } void func { A a; } 保持活力?

apt-get install linux-headers 
ln -s /usr/src/linux-headers-2.6.32-5-amd64/ /lib/modules/2.6.32-5-amd64/build

1 个答案:

答案 0 :(得分:5)

要获取指针的所有权,请使用std::unique_ptr::release()

  

释放托管对象的所有权(如果有)。

     

返回值。指向托管对象的指针,如果没有托管对象,则为nullptr,即调用前get()返回的值。

话虽如此,我不确定你为什么要做b = std::unique_ptr<char[]>(new char[100] { 0 }).release();。也许你想要的是这个,即让A本身存储unique_ptr

class A {
    A() : b(new char[100] { 0 }) { }

private:
    std::unique_ptr<char[]> b;
}    

现在,每当A实例被破坏时,A.b指向的内存将被释放。