C++ 은 객체 생성 부터 소멸 까지 프로그래머의 꼼꼼함이 필요하다. 스마트 포인터와 객체 생성 등 C++ 의 기본적인 부분을 이해 해보자.
스택 메모리를 할당 받아 객체를 생성하는 것을 말한다. 이러한 객체는 스코프를 벗어날 때 자동으로 소멸 된다(함수 호출/리턴이 아니더라도 중괄호 { ... }를 이용하여 얼마든지 스코프를 만들 수 있다.) 명시적으로 객체를 소멸시키지 않는다면 객체가 대입된 변수가 스포크에서 벗어나는 마지막 순간에 해당 객체의 소멸자가 호출 된다.
원시 포인터를 이용하여
Foo* foo = new Foo()
위와 같이 객체를 생성하면 힙 메모리에 객체가 할당된다. 이렇게 인스턴스를 생성하면 사용후 메모리 해제를 비롯한 뒷정리를 누가 할것인지가 불문명한 문제가 생긴다. 메모리 해제의 책임은 온전히 개발자에게 맡겨져 있다.
이 스마트포인터는 힙에 할단된 포인터를 받아, 더 이상 참조하는 곳이 없을 때 자동으로 소멸 작업이 이루어지도록 관리해준다. unique 포인터는 "독점"이라는 이름이 의미하듯이 복제할 수 없고 다른 함수에 넘겨줄 수도 없다. 단 원본과 그 제어권까지 통째로 이양하는 것은 가능하다.
공유 포인터라고도 한다. 힙에 할당된 포인터를 받아 코드 안의 다른 곳과 포인터를 공유하고 그 어느 부분에서도 더이상 참조하는 곳이 없을 때 자동으로 소멸되도록 관리 해준다.
간접 포인터라고도 하며 이 포인터는 소유 개념이 없다. 단지 shared_ptr에 의해 관리되는 포인터를 간접적으로 참조한다. 실제 객체에 참조를 할 때는 shared_ptr로 변환해야만 한다. 이 포인터는 shared_ptr 간에 순환 참조가 일어나는 것을 막기 위해 사용된다.
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 |
댓글 영역