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

问题描述 投票:2回答:1

我在主函数中创建一个对象作为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年发现了this github问题,但它不应在我的代码中出现问题(我认为/希望)。

c++ c++17 shared-ptr destructor ros2
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.