shared_ptr 对象的析构函数从未被调用

Destructor of shared_ptr Object never called

我在主函数中创建了一个对象作为 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
};

还是base-class/child-class的问题?

编辑:

我不知道这个,所以google刚才给了我一个提示:

我正在使用 "Ctrl+C" 退出终端中的进程。 但是 rclcpp 应该提供一个signal_handler 来处理这些信号。这似乎对我不起作用。我仍在搜索,但任何提示都会很棒。我发现了 2018 年的 this github 问题,但它不应该在我的代码中造成问题(我认为/希望)。

我不知道究竟是什么导致了这种行为,但在重置工作区并从头开始构建所有内容后它起作用了...