[c++] 스마트 포인터

About_work·2024년 9월 4일
0

c++

목록 보기
8/8
  • tsdf_integrator_.reset(new FastTsdfIntegrator(integrator_config, tsdf_map_->getTsdfLayerPtr())); 부분이 잘 이해되지 않는 이유는
    • reset 함수가 특별히 정의된 것이 아니라, 이는 std::unique_ptr에서 제공하는 함수이기 때문

std::unique_ptrreset 함수

  • tsdf_integrator_std::unique_ptr<TsdfIntegratorBase> 타입으로 정의되어 있습니다.
  • std::unique_ptr은 C++의 스마트 포인터로,
    • 동적으로 할당된 메모리를 관리하고 소멸 시 자동으로 메모리를 해제
  • reset 함수는 unique_ptr의 기본 제공 함수로,
    • 새로운 객체를 할당하고
    • 이전에 소유하고 있던 객체를 파괴하고 메모리를 해제하는 역할

reset 함수의 동작 방식

void reset(T* ptr = nullptr);
  • 위와 같이 std::unique_ptr::reset 함수는 다음과 같은 동작을 함
    • ptr에 전달된 새로운 객체를 소유
    • 기존에 소유하고 있던 객체(만약 있다면)를 삭제
    • 즉, 새로 전달된 객체로 포인터를 교체하고, 이전에 가리키던 객체는 자동으로 소멸

코드를 다시 살펴보면

tsdf_integrator_.reset(
    new FastTsdfIntegrator(integrator_config, tsdf_map_->getTsdfLayerPtr()));

이 코드는 다음과 같이 동작합니다:

  1. new FastTsdfIntegrator: 동적으로 FastTsdfIntegrator 객체를 생성합니다. 이때, FastTsdfIntegrator의 생성자에는 integrator_configtsdf_map_->getTsdfLayerPtr()을 인자로 전달하여 초기화합니다.
  2. tsdf_integrator_.reset(...): tsdf_integrator_는 기존에 소유하고 있던 객체(만약 있다면)를 파괴하고, 새로 생성한 FastTsdfIntegrator 객체를 소유하게 됩니다.

이 과정에서 기존 객체는 자동으로 삭제되며, 새로운 객체가 해당 포인터에 할당됩니다.

결론

reset 함수는 std::unique_ptr의 기본 기능이므로, 해당 클래스에서 따로 정의된 것이 아니어도 작동합니다. 이 코드는 FastTsdfIntegrator 객체를 동적으로 생성한 뒤, tsdf_integrator_ 스마트 포인터에 할당하여 그 메모리를 관리하도록 설정하는 것입니다.

따라서, 특별히 reset 함수가 tsdf_integrator_ 자체의 소스코드에 정의되어 있지 않더라도 std::unique_ptr에서 제공하는 함수이기 때문에 정상적으로 동작합니다.

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글