C++ sharedPtr实现

#include <iostream>
using namespace std;

template <typename T>
class shared_ptr {
private:
	// 引用计数指针与模板指针
    int* count;
	T* ptr;
public:
    // 构造函数,初始化引用计算与模板指针
	shared_ptr(T* p) : count(new int(1)), ptr(p) {
		cout << "调用构造函数" << endl;
	}
	// 复制构造函数,引用计算+1
	shared_ptr(shared_ptr<T>& other) : count(&(++*other.count)), ptr(other.ptr){
		cout << "调用复制构造函数" << endl;
	}
	// 指针运算符
	T* operator->() {
		cout << "调用指针运算符" << endl;
	    return ptr; // 返回模板指针
	}
    // 解引用运算符
	T& operator*() {
		cout << "调用解引用运算符" << endl;
	    return *ptr; // 返回对象本身
	}
	// 赋值操作符重载
	shared_ptr<T>& operator=(shared_ptr<T>& other) {
	    ++*other.count;
		if (this->ptr && --*this->count == 0) {
			 cout << "清理原智能指针" << endl;
		     delete count;
			 delete ptr;
		}
		cout << "调用赋值操作符" << endl;
		this->ptr = other.ptr;
		this->count = other.count;
		return *this;
	}
	// 析构函数
	~shared_ptr() {
	    if (--*count == 0) {
		    delete count;
			delete ptr;
		}
	}
	// 获取引用计数
	int getRef() {return *count;}
};

int main()
{
    shared_ptr<int> p1(new int(1));
	shared_ptr<int> p2(new int(2));
    p2 = p1;
	shared_ptr<int> p3(p1);
	
    cout << "Hello Rainy";
    return 0;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在ROS2中,C++节点通信主要通过ROS2提供的rclcpp库实现。rclcpp库是一个ROS2的C++客户端库,它提供了创建ROS2节点、发布和订阅话题、服务调用等功能。 下面是一个简单的例子,演示如何使用rclcpp库在C++节点之间进行通信: 1. 首先,我们需要包含必要的头文件: ```cpp #include "rclcpp/rclcpp.hpp" #include "std_msgs/msg/string.hpp" ``` 2. 创建一个发布者: ```cpp auto publisher = node->create_publisher<std_msgs::msg::String>("my_topic", 10); ``` 其中,`node`是一个`rclcpp::Node`对象,`std_msgs::msg::String`是消息类型,`my_topic`是话题名称,`10`是话题队列长度。 3. 创建一个消息: ```cpp auto message = std_msgs::msg::String(); message.data = "Hello, world!"; ``` 4. 发布消息: ```cpp publisher->publish(message); ``` 5. 创建一个订阅者: ```cpp auto subscription = node->create_subscription<std_msgs::msg::String>("my_topic", 10, [](const std_msgs::msg::String::SharedPtr msg) { RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "I heard: '%s'", msg->data.c_str()); }); ``` 其中,`std_msgs::msg::String`是消息类型,`my_topic`是话题名称,`10`是话题队列长度,`[](const std_msgs::msg::String::SharedPtr msg) {...}`是消息回调函数,用于处理接收到的消息。 6. 运行节点: ```cpp rclcpp::spin(node); ``` 以上是一个简单的例子,演示了如何在C++节点之间使用ROS2进行通信。在实际应用中,我们可以根据需要创建多个发布者和订阅者,以实现节点之间的复杂通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值