Programming/C&C++&C#

modern C++ 스마트포인터 unique_ptr

JMob 2019. 12. 26. 00:30
728x90
반응형

Smart Pointer의 unique_ptr 사용하기

  • 포인터 대입 복사 안됨.
  • 소유권 이전시 move() 사용
  • unique_ptr로 할당한 메모리는 reset()으로 초기화, delete로 초기화시 에러
#include <iostream>
#include <memory>

using namespace std;

class Point
{
    int x, y;
    public:
    Point(int _x, int _y) : x(_x), y(_y) { cout << "생성자" << endl;}
    ~Point() { cout << "소멸자" << endl; }
    void print() { cout << x << ", " << y << endl;}
};

int main(void)
{
    // 객체에 대한 포인터가 필요할 경우 unique pointer 사용
    unique_ptr<int> ptr1(new int(5));
    auto ptr2 = move(ptr1);            // pointer 소유권 이전
    // cout << *ptr1 << endl;        // error : Segnebtatuib fault
    // auto ptr3 = ptr2;            // error : unique pointer는 복사는 불가능
    cout << ptr1.get() << endl;        // nullptr 이라 0 출력
    cout << ptr2.get() << endl;
    cout << *ptr2 << endl;


    ptr1.reset();                    // 아무것도 안함
    ptr2.reset();                    // memony 초기화

    unique_ptr<Point> pt = make_unique<Point>(10, 20);
    pt->print();
    pt.reset();

    // delete qt;                    // error 
}
728x90
반응형

'Programming > C&C++&C#' 카테고리의 다른 글

modern C++ begin/end  (0) 2019.12.15
modern C++ noexcept  (0) 2019.12.15
modern C++ using 사용법  (0) 2019.12.15
modern C++ static_assert  (0) 2019.12.15
modern C++ 11/14 iteral & type, auto & decltype  (0) 2019.12.15