CS/C++

스마트포인터 / 사이클 해결 방법

혀니리리 2023. 12. 8. 17:09
728x90

[C++] 스마트포인터(Smart Pointer) (tistory.com)

 

[C++] 스마트포인터(Smart Pointer)

RAII RAII는 C++에서 자주 쓰이는 idiom으로 자원의 안전한 사용을 위해 객체가 쓰이는 스코프를 벗어나면 자원을 해제해주는 기법이다. C++에서 heap에 할당된 자원은 명시적으로 해제하지 않으면 해

hmjo.tistory.com

스마트 포인터의 특징

  • 자원을 획득한후, 자원 관리 객체에게 넘긴다
  • 자원관리 객체는 자신의 소멸자를 사용하여 자원이 확실하게 해제 되도록 한다
  • 버그 보완(안전), 자동청소, 자동 초기화를 해준다
  • 스마트 포인터는 C++에서 안전하고 효율적인 코드를 작성하는데 유용하다
  • delete를 이용해 직접 메모리를 해제하지 않고, 스마트 포인터의 소멸자에 존재하는 delete 키워드를 이용해서 메모리를 삭제한다
  • 원본 삭제 및 참조 카운팅 등을 이용해 댕글링 포인터가 되는 것을 막는다

 

스마트 포인터의 장점

  • Dangling Pointer로 인해 메모리 누수 현상을 방지할 수 있다.

스마트 포인터의 단점

  • 스마트 포인터가 NULL 인지 체크 불가
  • 상속 기반의 변환 제한
  • 상수 객체에 대한 포인터 지원 제한
  • 구현하기 까다롭다.
  • 이해하기 쉽지 않아 유지보수도 어렵다.
  • 디버깅이 어렵다.

 

Dangling Pointer란?

  • 첫 번째 - delete로 해제된 메모리를 가리키는 포인터.
  • 두 번째 - 스택 지역에서 사라진 메모리를 가리키는 포인터.

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

 

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

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

min-zero.tistory.com

1. 스마트 포인터(smart pointer)란?

자바의 경우 garbage collector를 통해 메모리를 관리하지만 c++은 사용자가 스스로 메모리를 할당 해제를 통해 관리해야 한다. c에서는 malloc, free로 메모리를 할당및 해제를 수행하고 c++은 new, delete를 사용한다. 이때 할당받은 메모리를 해제하지 않을경우 프로그램은 계속 사용하고 있는 메모리로 인지하고 해당 메모리를 사용하지 않는 메모리 누수(memory leak)가 발생한다. 이와 같은 메모리 누수를 방지하기 위해 스마트 포인터를 제공해준다. 스마트 포인터는 포인터 처럼 사용하는 클래스 템플릿으로 메모리를 자동으로 해제해 준다. 즉, delete를 자동으로 수행한다. 

 

포인터가 수명이 다하면 자동으로 소멸자를 호출해준다.

728x90

'CS > C++' 카테고리의 다른 글

포인터와 배열의 차이  (0) 2023.12.13
struct와 class의 차이  (0) 2023.12.13
버퍼 오버플로우  (0) 2023.12.08
함수 호출 stack frame 관련  (1) 2023.12.08
전방선언이 필요한 이유?  (1) 2023.12.08