make_unique继承
时间: 2023-09-07 21:12:43 浏览: 115
对不起,但是make_unique函数并没有继承的概念。make_unique是C++11中引入的一个辅助函数,用于创建和返回一个拥有独一无二指针(unique_ptr)的对象。它使用new操作符来动态分配内存,并将其封装在unique_ptr中,确保在对象不再需要时自动释放内存。
在C++中,继承是一种对象间的关系,它允许一个类(派生类)继承另一个类(基类)的成员变量和成员函数。通过继承,派生类可以重用基类的代码,并添加自己的特定实现。
所以,make_unique函数与继承没有直接的关系。它是用于管理动态内存的一种工具函数。如果你有关于继承的更多问题,请随时提问。
相关问题
ros2 std::make_unique
在ROS2中,std::make_unique函数用于创建一个唯一指针。它是C++14中引入的一个函数模板,用于在堆上创建一个对象,并返回一个指向该对象的唯一指针。在ROS2中,可以使用std::make_unique函数来创建ROS2节点。例如,可以使用以下代码创建一个继承自rclcpp::Node的类的实例:
```cpp
auto node = std::make_unique<MinimalPublisher>();
```
这将创建一个MinimalPublisher类的实例,并返回一个指向该实例的唯一指针。然后,可以使用该指针来访问该节点的成员函数和变量。
引用:
\[1\] 截至目前,galactic虽然对以上过程进行了一定程度的封装,但封装也极为简化,同时read的流程仍没有封装,使用还是很麻烦。节点的建立ROS2使用了完全的面向对象设计,以C++为例,大量的ROS API都封装在了rclcpp::Node这个类中,也就意味着需要使用这些API,你必须定义一个继承自Node的类,这也就强制用户必须使用类的方式构建整个系统,官方的一个简单的例子如下:class MinimalPublisher : public rclcpp::Node { public: MinimalPublisher() : Node("minimal_publisher"), count_(0) { publisher_ = this->create_publisher<std_msgs::msg::String>("topic", 10); timer_ = this->create_wall_timer( 500ms, std::bind(&MinimalPublisher::timer_callback, this)); } private: rclcpp::TimerBase::SharedPtr timer_; rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_; size_t count_; }
\[2\] 只要在同一ID的机器就可以接受到彼此的消息。yaml配置文件比较坑的一个细节,ROS2在yaml使用上有两个变化,如下:test_node: ros__parameters: common: topic: "your_topic"
\[3\] 主要是下面三个部分:名称重定向日志配置参数使用命令行传参在eloquent之后需要加 --ros-args标志,dashing版本不需要eloquent:ros2 run my_package node_executable --ros-args ...
#### 引用[.reference_title]
- *1* *2* [ROS2实践总结](https://blog.csdn.net/liu3612162/article/details/121906612)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [[ros2学习]-学习ROS 2工具集](https://blog.csdn.net/weixin_36628778/article/details/106375420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
为什么用enable_shared_from_this,而不是显式地将 this 指针传递给 std::make_shared 函数
使用 `enable_shared_from_this` 主要是为了方便在对象内部获取指向自身的 `shared_ptr`,而不需要显式地将 `this` 指针传递给 `std::make_shared` 函数。
当一个类继承自 `std::enable_shared_from_this` 时,它会获得一个成员函数 `shared_from_this`,该函数可以返回一个指向当前对象的 `shared_ptr`。这个函数可以在类的成员函数内部调用,而无需传递 `this` 指针。
这种用法主要是为了解决在某些场景下,当一个对象自身已经被一个 `shared_ptr` 管理时,需要在类内部获取指向自身的 `shared_ptr` 的需求。如果不使用 `enable_shared_from_this`,则需要在每次创建对象时都显式地传递 `this` 指针给 `std::make_shared`,这样会增加代码的复杂性和出错的可能性。
需要注意的是,使用 `enable_shared_from_this` 需要满足以下条件:
1. 对象必须被 `shared_ptr` 管理,即不能使用裸指针或者 `unique_ptr` 管理对象;
2. 在获取 `shared_ptr` 的成员函数中调用 `shared_from_this`。
总之,使用 `enable_shared_from_this` 可以提供更方便和安全的方式来获取指向自身的 `shared_ptr`。
阅读全文