C++智能指针的实现
转自 C++11中智能指针的原理、使用、实现
#include <iostream> #include <memory> template<typename T> class SmartPointer { private: T* _ptr; size_t* _count; public: SmartPointer(T* ptr = nullptr) : _ptr(ptr) { if (_ptr) { _count = new size_t(1); } else { _count = new size_t(0); } } SmartPointer(const SmartPointer& ptr) { if (this != &ptr) { this->_ptr = ptr._ptr; this->_count = ptr._count;/** 所以实际上是共用了一个_count,是同一个内存 **/ (*this->_count)++; } } SmartPointer& operator=(const SmartPointer& ptr) { if (this->_ptr == ptr._ptr) { return *this; } if (this->_ptr) { (*this->_count)--; if (this->_count == 0) { delete this->_ptr; delete this->_count; } } this->_ptr = ptr._ptr; this->_count = ptr._count; (*this->_count)++; return *this; } T& operator*() { assert(this->_ptr == nullptr); return *(this->_ptr); } T* operator->() { assert(this->_ptr == nullptr); return this->_ptr; } ~SmartPointer() { (*this->_count)--; if (*this->_count == 0) { delete this->_ptr; delete this->_count; } } size_t use_count(){ return *this->_count; } }; int main() { { SmartPointer<int> sp(new int(10)); SmartPointer<int> sp2(sp); SmartPointer<int> sp3(new int(20)); sp2 = sp3; std::cout << sp.use_count() << std::endl; std::cout << sp3.use_count() << std::endl; } //delete operator }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步