(C++ : IOCP-15) 스마트 포인터

Posted by : at

Category : Cpp   iocp


표준 삼 종 스마트 포인터에 대해서 알아보자.

unique_ptr

unique_ptr<class> ptr = make_unique<class>();

// 일반 포인터와 거의 동일
// 차이점이라하면 복사가 안된다는 점

// 복사를 하고 싶다면
unique_ptr<class> copy = std::move(ptr);    // 이렇게 하자

// 소멸을 알아서 해준다는 점

shared_ptr

shared_ptr<class> ptr(new class());
// -> [class mem][RefCount mem]        // 내부적으로 메모리 공간을 2개 할당한다.
shared_ptr<class> ptr = make_shared<class>();
// -> [class mem | RefCount mem]        // 내부적으로 메모리 공간을 1개 할당한다.

// 이렇게 메모리 공간을 나눈 이유?
// class mem을 날리고 나면 RefCount를 통해 메모리할당 해지를 했는지 확인(weak ptr expired)이 가능하기에

weak_ptr

shared_ptr<class> sptr = make_shared<class>();
weak_ptr<class> wptr = sptr;

// 사용은 이렇게
bool expired = wptr.expired();

// 만약 매번 expired 체크가 번거롭다면
shared_ptr<class> sptr2 = wptr.lock();  // shared_ptr로 캐스팅



// (참고) [RefCount mem]의 내부적으론 useCount(shared mem), weak Count를 보관하고 있는다

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links