본문 바로가기
[ C++ ]/- C++ 문법정리

C++ 29 [스마트 포인터]

by MRG 2023. 5. 16.
728x90
반응형

https://learn.microsoft.com/ko-kr/cpp/cpp/smart-pointers-modern-cpp?view=msvc-170 

 

스마트 포인터(최신 C++)

자세한 정보: 스마트 포인터(최신 C++)

learn.microsoft.com

 

▣ 스마트포인터 : C++11 버전 이후부터 새로운 스마트포인터 제공

 

▣ 스마트포인터 : 메모리 할당 시 따로 delete를 사용하지 않아도 메모리 자동해제

 

▣ 스마트포인터 종류 
▣ unique_ptr : 하나의 객체에 하나의 포인터만 소유권을 가질 수 있는 스마트포인터


▣ shared_ptr : 하나의 객체가 참조하는 스마트 포인터가 총 몇 개인지를 참조하는 스마트포인터 


▣ weak_ptr : shared_ptr 객체에 대한 접근은 가능하지만 메모리 소유권이 없고 소유자 수에도 포함되지 않는 스마트포인터

 

▣ unique_ptr사용방법 : unique_ptr<데이터타입>포인터이름(new 할당받을 메모리타입);

 

▣ 자동으로 메모리를 해제하기 때문에 생성자, 소멸자 모두 자동 호출

 

▣ 일반적으로 new 키워드를 이용해서 메모리할당을 하게 되면 생상자만 호출

 

▣ unique_ptr 사용방법 : unique_ptr<데이터타입>포인터이름(new 할당받을 메모리타입);

 

▣ release() :  메모리 소유권을 넘겨주는 함수

unique_ptr 포인터는 하나의 주소의 소유권만 가지고 있기 때문에 메모리를 확인해 보면 &test 주소 확인

 

▣ release() 함수를 사용하고 &test2에 메모리를 확인하면 &test1에 있던 주소가 들어있는 걸 확인

 

▣ reset() : 메모리를 재설정하는 함수

 

▣ 메모리 재설정 시 메모리 생성 및 소멸 순서 확인

 

▣ shared_ptr 사용방법 : shared_ptr<데이터타입>포인터이름(new 할당받을 메모리타입);

 

▣ use_count() : 몇 개의 포인터가 가리키고 있는지 반환 

 

▣ weak_ptr 사용방법 : weak_ptr<데이터타입>포인터이름; , weak_ptr<데이터타입>포인터이름 = 포인터;

 

▣ weak_ptr 포인터는 use_count()에 포함하지 않는다.

 

▣ expired() : 포인터가 가리키고 있는 게 있는지에 대한 여부 반환
▣ lock() : 포인터를 가리키고 있으면 shared_ptr 주소반환, 아니면 NULL 반환

728x90
반응형

'[ C++ ] > - C++ 문법정리' 카테고리의 다른 글

C++ 31 [스트림 객체 상태 플래그]  (0) 2023.10.04
C++ 30 [Manipulator 조정자]  (2) 2023.10.03
C++ 28 [예외처리]  (0) 2023.05.12
C++ 27 [파일입출력]  (2) 2023.05.09
C++ 26 [포맷플래그 입출력]  (0) 2023.05.03

댓글