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

狮子座

我在主函数中创建一个对象作为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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么std :: shared_ptr两次调用我的析构函数?

不为 shared_ptr 派生类调用析构函数

如果未使用shared_ptr定义虚拟析构函数,有什么好处?

具有shared_ptr的成员的C ++析构函数顺序

shared_ptr析构函数,复制和不完整类型

对链接列表使用shared_ptr可以在析构函数中提供stackoverflow

通过类析构函数中的重置成员shared_ptrs解决C ++ 11 shared_ptr循环参考?

使用shared_ptr时需要实现析构函数,复制构造函数,赋值运算符

在函数调用期间析构对象

std::map 对象析构函数被调用?

重载 -> shared_ptr<interface> 实例中的箭头运算符,接口中没有纯虚拟析构函数

当包含它的对象调用其析构函数时,unique_ptr是否会取消分配?

析构函数调用

unique_ptr :: release()是否调用析构函数?

unique_ptr 两次调用析构函数

返回的结构调用它自己的析构函数,该析构函数销毁分配的对象

如何在具有受保护的析构函数和公共销毁方法的3d派对类上使用shared_ptr

C ++:析构函数在对象范围之外被调用?

调用类型嵌套在类内部的对象析构函数?

C ++:删除对象而不调用析构函数

使用Vector创建对象时如何调用析构函数

如何阻止析构函数在堆栈分配的对象上被调用?

析构函数使用静态对象调用两次

GDB:调用特定对象的析构函数时的断点

按值传递对象时调用的析构函数

向量push_back调用对象析构函数

为什么调用从对象移出的析构函数?

对象超出范围后不调用析构函数

什么时候调用constinit对象的析构函数?