C++ 智能指针简单实现
#pragma once template<typename TR> class joker_shared_ptr { private: TR * ptr; size_t * count; public: constexpr joker_shared_ptr(/* args */)noexcept{ } constexpr joker_shared_ptr(std::nullptr_t )noexcept { } explicit joker_shared_ptr(TR * ptr):ptr(ptr),count(new size_t(1)){ } ~joker_shared_ptr() { if(count != nullptr && (*count) > 1) { (*count) -- ; return; } if(count != nullptr ) delete count; if(ptr != nullptr ) delete ptr; } joker_shared_ptr(const joker_shared_ptr &other)noexcept:ptr(other.ptr),count(other.count) { if(count != nullptr) { (*count)++; } } joker_shared_ptr& operator=(const joker_shared_ptr & other)noexcept { if (this->get() == other.get()) { return *this; } if(count != nullptr) { (*count)--; if(*count == 0) { delete count; if(ptr != nullptr) delete ptr; } } count = other.count; ptr = other.ptr; if(count != nullptr && ptr != nullptr) { (*count)++; } return *this; } size_t use_count() const noexcept { if( count != nullptr) { return *count; } else { return 0; } } TR* get()const noexcept { return ptr; } TR& operator*() const noexcept { return *ptr; } }; #if 0 template<typename TR> joker_shared_ptr<TR>& joker_shared_ptr<TR>::operator=(const joker_shared_ptr & other)noexcept { if(count != nullptr) { (*count)--; if(*count == 0) { delete count; if(ptr != nullptr) delete ptr; } } count = other.count; ptr = other.ptr; if(count != nullptr && ptr != nullptr) { (*count)++; } return *this; } #endif
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了