상세 컨텐츠

본문 제목

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++' 카테고리의 다른 글

관련글 더보기

댓글 영역