스마트 포인터(smart pointer)

2022. 3. 23. 17:23기술 면접

스마트 포인터(smart pointer)

C++에서는 new 키워드를 사용하여 동적으로 할당받는 메모리는 반드시 delete 키워드를 사용하여 해제해야 한다. 하지만 스마트 포인터는 포인터처럼 동작하는 클래스 템플릿으로, 사용이 끝난 메모리를 자동으로 해제해 준다.

 

스마트 포인터 종류

  • shared_ptr
    • 어떤 하나의 객체를 참조하는 스마트 포인터의 개수를 참조하는 스마트 포인터이다. 이렇게 참조하고 있는 스마트 포인터의 개수를 참조 카운트라고한다. 참조 카운트는 해당 메모리를 참조하는 포인터가 몇개인지 나타내는 값을 말한다.
  • unique_ptr
    • 하나의 스마트 포인터만이 객체를 가리킬 수 있도록 한다. shared_ptr과 다르게 참조 카운트가 1을 넘길 수 없다.
  • weak_ptr
    • 하나 이상의 shared_ptr가 가르키는 객체를 참조할 수 있지만 참조 카운트를 늘리지않는 스마트 포인터이다. shared_ptr을 사용할 때 발생할 수 있는 문제를 해결하기 위해 사용한다.

 

 

스마트 포인터에 대해 설명해주세요

기존 C++에서는 new 키워드를 사용하여 동적으로 할당받는 메모리는 반드시 delete키워드를 사용하여 해제해야 합니다. 하지만 스마트 포인터는 포인터처럼 작동하는 클래스 템플릿으로, 사용이 끝난 메모리를 자동으로 해제해줍니다. 스마트 포인터의 종류는 3가지가 있으며 shared_ptr, unique_ptr,weak_ptr이 있습니다. shared_ptr은 하나의 객체를 참조하는 스마트 포인터의 개수를 참조하는 스마트 포인터입니다. 참조하고 있는 스마트 포인터 개수를 참조 카운트라고 합니다. unique_ptr은 하나의 스마트 포인터만이 객체를 가리킬 수 있도록 하는 것입니다. weak_ptr은 하나 이상의 shared_ptr이 소유하는  가르키는 객체를 참조할 수 있지만 참조 카운트를 늘리지 않는 스마트 포인터입니다.