C++手动实现共享智能指针my_shared_ptr|引用计数+删除器+完整可运行代码
1.共享智能指针的概念共享型智能指针就是做出一个像JAVA中垃圾回收器,并且可以运用到所有资源,heap内存和系统资源都可以使用的系统。shared_ptr实现了共享所有权(shared ownership)方式来管理资源对象,这意味没有一个特定的shared_ptr拥有资源对象。相反,这些指向同一资源对象的shared_ptr相互协作来确保该资源对象在不需要是被析构。就相当于多个指针指向同一个资源,当该资源无人持有时则被释放。那么怎么知道该资源的持有情况呢?这就要用到MyString中的引用计数。2.引用计数的概念引用计数 =多个 MyString 对象共享同一块内存,用一个计数器记录有多少人在用;没人用时才释放内存,避免频繁拷贝字符串,大幅提升效率。 在该只能指针的编写中会引入引用计数器的使用,其作用是当新的shared_ptr对象与资源对象的地址关联时,则在其构造函数中,将与此资源对象关联的引用计数增加1;当任何shared_ptr对象超出作用域时,则在其析构函数中,将与资源对象关联的引用计数减1;如果引用计数变为0,则表示没有其他shared_ptr对象与此资源对象关联,在这种情况下,它使用deleter删除器删除资源对象。3.shared_ptr源代码编写(1)整体代码结构说明①my_deleter:删除器(普通对象 / 数组 区分delete/delete[])②my_refCount:引用计数控制器(管理_Uses强引用、_Weaks弱引用)③my_shared_ptr:智能指针主体(持有指针 + 计数对象 + 删除器)④测试函数:验证移动语义、普通使用(2)my_deleter删除器templateclass _Ty struct my_deleter { void operator()(_Ty* ptr) const { delete ptr; // 普通对象用 delete } }; // 偏特化:数组版本 templateclass _Ty struct my_deleter_Ty[] { void operator()(_Ty* ptr) const { delete[] ptr; // 数组必须用 delete[] } };(3)my_refCount引用计数控制器强引用管「对象生死」,弱引用管「控制块生死」。 强引用_Uses(管托管对象),每多一个shared_ptr指向对象 →_Uses++,每少一个shared_ptr→_Uses--,当_Uses == 0:必须 delete 托管对象,强引用的作用是保证对象只有没人用了才释放。 弱引用_Weaks(管引用计数控制块),每多一个weak_ptr→_Weaks++,每少一个weak_ptr→_Weaks--,当_Weaks
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2472793.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!