언어/C++

[C++] 스마트 포인터

겜도리도리 2021. 12. 15. 13:59
반응형

개념

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

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

https://min-zero.tistory.com/entry/C-STL-1-3-%ED%85%9C%ED%94%8C%EB%A6%BF-%EC%8A%A4%EB%A7%88%ED%8A%B8-%ED%8F%AC%EC%9D%B8%ED%84%B0smart-pointer

 

[C++ STL] 1-3. 템플릿 - 스마트 포인터(smart pointer)

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 틀린 부분에 대한 지적은 감사합니다. 1. 스마트 포인터(smart pointer)란? 자바의 경우 garbage collector를 통해 메모리를 관리

min-zero.tistory.com

 

반응형