釋放給調用方返回的存儲指針的所有權,并將存儲的指針值設置為nullptr。
使用?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 releaseauto 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();
}
運行結果:
Constructing Sample(3)
Constructing Sample(42)
Deleting Sample(42)
Deleting Sample(3)
注意一點:
release后被接管的指針ptr,需要自己釋放;而原先的up1離開了函數自動釋放。