`WeakPtr` 的 `lock()` 成员函数

ParametersHandler::ParametersHandler(
  const rclcpp_lifecycle::LifecycleNode::WeakPtr & parent)
{
  node_ = parent;
  auto node = node_.lock();
  node_name_ = node->get_name();
  logger_ = node->get_logger();
}  

在这段代码中,ParametersHandler::ParametersHandler 是一个构造函数,它接收一个 rclcpp_lifecycle::LifecycleNode::WeakPtr 类型的参数,这个参数是一个弱引用(weak pointer)到一个生命周期节点(LifecycleNode)。弱引用是一种智能指针,它指向一个对象,但不拥有该对象,因此不会影响对象的生命周期。

auto node = node_.lock(); 这行代码的意思是:

  1. node_.lock(): 调用 WeakPtrlock() 成员函数,尝试获取一个强引用(strong pointer)到所指向的对象。如果原始对象已经被销毁,lock() 将返回一个空的 std::shared_ptr

  2. auto: C++11 引入的类型推导关键字,它让编译器根据赋值表达式的右侧来自动推导出变量 node 的类型。在这个上下文中,node 将被推导为 std::shared_ptr 类型,因为 lock() 返回的是一个 std::shared_ptr

  3. 赋值操作:将 lock() 返回的 std::shared_ptr 赋值给局部变量 node。如果 node_ 指向的对象仍然存在,node 将是一个有效的强引用,可以安全地使用;如果 node_ 指向的对象已经被销毁,node 将是一个空的 std::shared_ptr

使用 lock() 的目的是在需要使用原始对象的时候,能够安全地获取一个强引用。由于弱引用本身不拥有对象,所以不能直接使用它来访问对象成员,必须先通过 lock() 获取强引用。

在这个构造函数中,获取强引用后,可以安全地调用 node->get_name()node->get_logger() 来获取节点的名称和日志记录器,因为这些操作需要一个有效的对象引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值