반응형
개념
C++은 C#처럼 Gabage Collecter(GC)가 없다. 따라서 메모리 할당을 따로 하고, 해제 해줘야한다.
예를 들어 new로 할당해준 경우에는, delete로 해제해줘야 한다.
해제해주지 않으면, memory leak(메모리 누수)이 발생하게 되고, 이는 프로그램 오류의 원인이 된다.
스마트 포인터를 사용하면, 사용이 끝난 메모리를 자동으로 해제해 주므로, 이런 오류를 방지할 수 있다.
헤더 파일 : memory
종류
1. unique_ptr
하나의 스마트 포인터만이 특정 객체를 소유할 수 있도록, 객체에 소유권 개념을 도입한 스마트 포인터
이동은 가능하지만, 복사는 불가능하다. 따라서 참조 전달은 가능하지만, 값 전달(복사 생성자)은 불가능.
2. shared_ptr
하나의 특정 객체를 참조하는 스마트 포인터가 총 몇 개인지를 참조하는 스마트 포인터
참조 카운터(reference count)를 통해 메모리를 참조하는 포인터가 몇 개인지 확인할 수 있다.
참조 카운터가 0이라면, 메모리를 해제해준다.
3. weak_ptr
하나 이상의 shared_ptr 인스턴스가 소유하는 객체에 대한 접근을 제공하지만, 소유자의 수에는 포함되지 않는 스마트 포인터
shared_ptr 인스턴스 사이의 순환 참조를 제거하기 위해서 사용
참고
http://tcpschool.com/cpp/cpp_template_smartPointer
반응형
'언어 > C++' 카테고리의 다른 글
[C++] #pragma once와 #ifndef ~ #endif (0) | 2021.12.26 |
---|---|
[C++] shared_ptr 직접 구현해보기 (0) | 2021.12.16 |
[C++] string 클래스 정리 (0) | 2021.12.09 |
이항 '<': 'const_Ty'이(가) 이 연산자를 정의하지 않거나 미리 정의된 연산자에 허용되는 형식으로의 변환을 정의하지 않습니다. (0) | 2021.12.02 |
sstream을 사용하여 문자열 split 하기 (C++) (0) | 2021.11.21 |