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