RAII 패턴으로 구현된 포인터로
스마트 포인터로 불린다 명시적으로 메모리를 delete 할 필요 없이
해당 객체의 유효 범위를 벗어나면 자동으로 메모리 해제를 할 수 있게 되어있으며
또한 unique라는 이름에 맞게 단일 소유권을 가지며 이동 시멘틱을 통해 객체의 소유권을 넘길 수 있다.
#include <iostream>
class Test
{
public:
Test() {}
~Test() {}
public:
void PrintTest()
{
std::cout << "Test" << std::endl;
}
};
int main()
{
std::unique_ptr<Test> uniqueTest = std::make_unique<Test>();
// 현재 소유하고 있는 객체의 소유권을 해제하고 새로운 객체를 인자로 넣을 시
// 새로운 객체를 관리한다. 인자가 없을 시 현재 소유한 객체를 메모리 해제 후 nullptr로 설정한다.
uniqueTest.reset();
// 객체에 대한 원시 포인터를 반환
Test* testA = uniqueTest.get();
testA->PrintTest();
// 현재 소유하고 있는 객체의 소유권을 포기 하고 원시 포인터를 반환 한다.
// 이럴 경우 메모리 관리를 수동으로 해야 한다.
Test* testB = uniqueTest.release();
// release()를 쓰지 말고 std::move()를 쓰자.
std::unique_ptr<Test> newUnique = std::move(uniqueTest);
return 0;
}'C, C++' 카테고리의 다른 글
| weak_ptr (0) | 2023.07.17 |
|---|---|
| shared_ptr (0) | 2023.07.16 |
| <unordered_map>, <unordered_set> (0) | 2023.07.11 |
| <map>, <set> (0) | 2023.07.10 |
| <string> (0) | 2023.07.08 |