tsdf_integrator_.reset(new FastTsdfIntegrator(integrator_config, tsdf_map_->getTsdfLayerPtr())); 부분이 잘 이해되지 않는 이유는 reset 함수가 특별히 정의된 것이 아니라, 이는 std::unique_ptr에서 제공하는 함수이기 때문std::unique_ptr의 reset 함수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()));
이 코드는 다음과 같이 동작합니다:
new FastTsdfIntegrator: 동적으로 FastTsdfIntegrator 객체를 생성합니다. 이때, FastTsdfIntegrator의 생성자에는 integrator_config과 tsdf_map_->getTsdfLayerPtr()을 인자로 전달하여 초기화합니다.tsdf_integrator_.reset(...): tsdf_integrator_는 기존에 소유하고 있던 객체(만약 있다면)를 파괴하고, 새로 생성한 FastTsdfIntegrator 객체를 소유하게 됩니다.이 과정에서 기존 객체는 자동으로 삭제되며, 새로운 객체가 해당 포인터에 할당됩니다.
reset 함수는 std::unique_ptr의 기본 기능이므로, 해당 클래스에서 따로 정의된 것이 아니어도 작동합니다. 이 코드는 FastTsdfIntegrator 객체를 동적으로 생성한 뒤, tsdf_integrator_ 스마트 포인터에 할당하여 그 메모리를 관리하도록 설정하는 것입니다.
따라서, 특별히 reset 함수가 tsdf_integrator_ 자체의 소스코드에 정의되어 있지 않더라도 std::unique_ptr에서 제공하는 함수이기 때문에 정상적으로 동작합니다.