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简单实现:
原文链接: https://www.cnblogs.com/qiang-wei/p/12631364.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/339864
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!