标签:count int C++ 智能 template ori 指针 ptr SmartPtr
share_ptr 简单实现:
#include <iostream> using namespace std; template<class T> class SmartPtr { public: SmartPtr(T* ori_ptr); ~SmartPtr(); SmartPtr(SmartPtr<T>& ori_ptr); SmartPtr<T>& operator=(const SmartPtr<T>& ori_ptr); private: T* ptr; int* count; }; template<class T> SmartPtr<T>::SmartPtr(T* ori_ptr) { count = new int(1); ptr = ori_ptr; } template<class T> SmartPtr<T>::~SmartPtr() { if (--(*count) <= 0) { delete ptr; delete count; ptr = nullptr; count = nullptr; cout << "object was destroied" << endl; } } template<class T> SmartPtr<T>::SmartPtr(SmartPtr<T>& ori_ptr) { ++(*ori_ptr.count); ptr = ori_ptr.ptr; count = ori_ptr.count; } // 赋值运算符比较特殊,因为左边操作数本来可能已经指向了另外一个对象 // 所以在给左边智能指针赋值时,其所指向的对象应该被析构,所以要加一个判断,是否应该析构左边指针的原对象 template<class T> SmartPtr<T>& SmartPtr<T>::operator=(const SmartPtr<T>& ori_ptr) { ++(*ori_ptr.count); if (--(*count) <= 0) // 释放左边智能指针管理的原对象 { delete ptr; delete count; cout << " origin object destroied " << endl; } ptr = ori_ptr.ptr; count = ori_ptr.count; return *this; } int main() { SmartPtr<int> smartPtr1(new int(1)); SmartPtr<int> smartPtr11(smartPtr1); SmartPtr<int> smartPtr2(new int(2)); smartPtr2 = smartPtr1; return 0 }
weak_ptr简单实现:
标签:count,int,C++,智能,template,ori,指针,ptr,SmartPtr 来源: https://www.cnblogs.com/qiang-wei/p/12631364.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。