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

标签 c++ c++17 shared-ptr destructor ros2

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

还是基类/子类的问题?

编辑:

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

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

最佳答案

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

关于c++ - shared_ptr 对象的析构函数从未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58644994/

相关文章:

c# - 在 C# 中调用 Cygwin GCC DLL 在 malloc 上挂起

c++ - 类型特征检查类特殊函数的琐碎性的基本原理

c++ - 隐藏重载虚函数的模板化访问者 : SFINAE on using?

c++ - 为什么 std::shared_ptr 提供 operator<<?

c++ - enable_shared_from_this 和继承

c++ - 未解析的外部符号 "int randomNumber"

c++ - 使用 Remove 删除文件 - C++

c++ - MacOS 上Qt GUI Widget 大小异常

c++ - 新文件系统库和 clang++7 的 undefined reference 错误

c++ - 从 std::vector 获取最后一个元素