我在主函数中创建一个对象作为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来处理那些信号。这似乎对我不起作用。我仍在搜寻中,但任何提示都会很棒。我从2018年发现了这个github问题,但它不应在我的代码中出现问题(我认为/希望)。
我不知道是什么导致了此行为,但是在重置工作区并从头开始构建所有内容之后,它就起作用了...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句