상세 컨텐츠

본문 제목

C++ 메모리 관리

컴퓨터 언어/C++

by cepiloth 2021. 4. 29. 16:29

본문

728x90
반응형

C++ 은 객체 생성 부터 소멸 까지 프로그래머의 꼼꼼함이 필요하다. 스마트 포인터와 객체 생성 등 C++ 의 기본적인 부분을 이해 해보자.

스택(stack) 할당

 스택 메모리를 할당 받아 객체를 생성하는 것을 말한다. 이러한 객체는 스코프를 벗어날 때 자동으로 소멸 된다(함수 호출/리턴이 아니더라도 중괄호 { ... }를 이용하여 얼마든지 스코프를 만들 수 있다.) 명시적으로 객체를 소멸시키지 않는다면 객체가 대입된 변수가 스포크에서 벗어나는 마지막 순간에 해당 객체의 소멸자가 호출 된다.

 

힙(Heap) 할당

원시 포인터를 이용하여 

Foo* foo = new Foo()

 위와 같이 객체를 생성하면 힙 메모리에 객체가 할당된다. 이렇게 인스턴스를 생성하면 사용후 메모리 해제를 비롯한 뒷정리를 누가 할것인지가 불문명한 문제가 생긴다. 메모리 해제의 책임은 온전히 개발자에게 맡겨져 있다.

 

unique 포인터(unique_ptr)

 이 스마트포인터는 힙에 할단된 포인터를 받아, 더 이상 참조하는 곳이 없을 때 자동으로 소멸 작업이 이루어지도록 관리해준다. unique 포인터는 "독점"이라는 이름이 의미하듯이 복제할 수 없고 다른 함수에 넘겨줄 수도 없다. 단 원본과 그 제어권까지 통째로 이양하는 것은 가능하다.

shared 포인터(shared_ptr)

 공유 포인터라고도 한다. 힙에 할당된 포인터를 받아 코드 안의 다른 곳과 포인터를 공유하고 그 어느 부분에서도 더이상 참조하는 곳이 없을 때 자동으로 소멸되도록 관리 해준다.

약한 포인터(weak_ptr)

간접 포인터라고도 하며 이 포인터는 소유 개념이 없다. 단지 shared_ptr에 의해 관리되는 포인터를 간접적으로 참조한다. 실제 객체에 참조를 할 때는 shared_ptr로 변환해야만 한다. 이 포인터는 shared_ptr 간에 순환 참조가 일어나는 것을 막기 위해 사용된다.

 

728x90
반응형

'컴퓨터 언어 > C++' 카테고리의 다른 글

std::string 으로 format 구현  (0) 2021.04.29
template method 기본 인자에 대한 형식 연역  (0) 2021.04.29
template method  (0) 2021.04.29
전방 선언 Forward Declaration  (0) 2020.09.25
타입추론  (0) 2020.06.22

관련글 더보기

댓글 영역