详解智能指针(附伪代码分析)

智能指针是C++11引入用于解决内存泄漏的情况,因为经常使用裸指针常在河边走,必然要湿鞋。但是需要注意的是智能指针和线程安全完全是两个事情。

shared_ptr

代码演示

template <typename T>
class SharedPtr {
   
   
private:
    T* ptr;                  // 实际对象的指针
    int* ref_count;          // 引用计数指针

public:
    // 构造函数
    explicit SharedPtr(T* p = nullptr) : ptr(p) {
   
   
        if (ptr) {
   
   
            ref_count = new int(1);  // 初始化引用计数为1
        } else {
   
   
            ref_count = nullptr;
        }
    }

    // 拷贝构造函数
    SharedPtr(const SharedPtr<T>& other) {
   
   
        ptr = other.ptr;
        ref_count = other.ref_count;
        if (ref_count) {
   
   
            (*ref_count)++;  // 增加引用计数
        }
    }

    // 析构函数
    ~SharedPtr() {
   
   
        if (ref_count) {
   
   
            (*ref_count)--;  // 减少引用计数
            if (*ref_count == 0) {
   
   
                delete ptr;      // 如果引用计数为0,释放对象内存
                delete ref_count; // 释放引用计数的内存
            }
        }
    }

    // 重载 `*` 操作符
    T& operator*() const {
   
    return *ptr; }

    // 重载 `->` 操作符
    T* operator->() const {
   
    return ptr; }

    // 重载赋值操作符
    SharedPtr<T>& operator=(const SharedPtr<T>& other) {
   
   
        if (this != &other) {
   
   
            // 先减少当前引用计数
            if (ref_count) {
   
   
                (*ref_count
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值