2015-10-30 4 views

ответ

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 будет освобожден.

Смежные вопросы