unique_ptr

Yongs12 ㅣ 2023. 7. 15. 16:00

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