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
에서 제공하는 함수이기 때문에 정상적으로 동작합니다.