Поделиться через


unique_ptr::release

Освобождает владение возвращаемого сохраненного указателя в вызывающий объект и задает сохраненному указателю значение nullptr.

pointer release();

Значение свойства, возвращаемое значение

Возвращает сохраненный указатель.

Заметки

Используйте release для получения прав на владение необработанным указателем, сохраненным unique_ptr. Вызывающий объект отвечает за удаление возвращаемого указателя. Указателю unique-ptr присвоено пустое состояние, созданное по умолчанию. Для unique_ptr можно назначить другой указатель совместимого типа после вызова release.

Пример

В этом примере показано, каким образом объект, вызывающий освобождение, отвечает за возвращенный объект.

// stl_release_unique.cpp
// Compile by using: cl /W4 /EHsc stl_release_unique.cpp
#include <iostream>
#include <memory>

struct Sample {
   int content_;
   Sample(int content) : content_(content) {
      std::cout << "Constructing Sample(" << content_ << ")" << std::endl;
   }
   ~Sample() {
      std::cout << "Deleting Sample(" << content_ << ")" << std::endl;
   }
};

void ReleaseUniquePointer() {
   // Use make_unique function when possible.  
   auto up1 = std::make_unique<Sample>(3);
   auto up2 = std::make_unique<Sample>(42);
   
   // Take over ownership from the unique_ptr up2 by using release
   auto ptr = up2.release();
   if (up2) {
      // This statement does not execute, because up2 is empty.
      std::cout << "up2 is not empty." << std::endl;
   }
   // We are now responsible for deletion of ptr.
   delete ptr;
   // up1 deletes its stored pointer when it goes out of scope.   
}

int main() {
   ReleaseUniquePointer();
}

Выходные данные компьютера

  

Требования

Заголовок: <память>

Пространство имен: std

См. также

Задачи

Практическое руководство. Создание и использование экземпляров unique_ptr

Ссылки

Класс unique_ptr

<memory>

Другие ресурсы

члены unique_ptr

Члены <память>