unique_ptr::release
호출자에 대해 저장된 포인터가 반환되면 소유권을 해제하고 저장된 포인터 값을 nullptr로 설정합니다.
pointer release();
속성 값/반환 값
저장된 포인터를 반환합니다.
설명
release를 사용하여 unique_ptr이 저장한 원시 포인터의 소유권을 가져올 수 있습니다. 호출자는 반환된 포인터를 삭제해야 합니다. unique-ptr은 비어 있는 기본 생성 상태로 설정됩니다. release 호출 후에 호환되는 형식의 다른 포인터를 unique_ptr에 할당할 수 있습니다.
예제
이 예에서는 릴리스의 호출자가 반환된 개체를 책임지는 방식을 보여 줍니다.
// 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();
}
컴퓨터 출력:
요구 사항
헤더: <memory>
네임스페이스: std