Я создаю объект в главной функции как объект std :: shared_ptr и хочу сохранить некоторую информацию о нем в своем деструкторе. Однако я обнаружил, что деструктор объекта никогда не вызывается. Могу ли я вручную убедиться, что деструктор вызван? И кто-нибудь знает, почему деструктор никогда не вызывается? Это как-то связано с ros2?
Вот какой-то код: main.cpp:
#include "q_learner/q_learner_node.h"
int main(int argc, char * argv[])
{
rclcpp::init(argc, argv);
rclcpp::executors::MultiThreadedExecutor exec;
auto q_learner_node = std::make_shared<q_learner::QLearnerNode>();`//This is the object that never gets destructed.
exec.add_node(q_learner_node);
exec.spin();
rclcpp::shutdown();
return 0;
}
И q_learner_node.cpp:
QLearnerNode::QLearnerNode() : rclcpp::Node("q_learner_node"){
// ... some stuf ...
}
QLearnerNode::~QLearnerNode(){
std::cout << "Destructor called" << std::endl;
// ... some other stuff ...
}
// some more stuff
и q_learner_node.h:
class QLearnerNode : public rclcpp::Node
{
public:
QLearnerNode();
~QLearnerNode();
private:
// some more stuff
};
Или это проблема базового класса / дочернего класса?
РЕДАКТИРОВАТЬ:
Я не знал этого,Так что Google дал мне подсказку только сейчас:
Я использую "Ctrl + C", чтобы выйти из процесса в терминале. Однако rclcpp должен предоставить обработчик signal_handler для обработки этих сигналов. Это не похоже на работу для меня. Я все еще занимаюсь поиском, но любые намеки были бы отличными. Я обнаружил эту проблему с github 2018 года, но она не должна создавать проблем в моем коде (я думаю / надеюсь).