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

Pno*_*tNP 1 c++ memory-management shared-ptr unique-ptr c++11

这是一个后续的问题这个.

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

有没有办法保持b活力?

class A{
  public:
   A() {
        b = std::unique_ptr<char[]>(new char[100] { 0 });
   }
 char* b;
}

void func {
   A a;
}
Run Code Online (Sandbox Code Playgroud)

Cla*_*diu 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;
}    
Run Code Online (Sandbox Code Playgroud)

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