句柄类中计数器的分离

本文深入探讨了智能指针与句柄类的高级应用,包括计数器的分离、模块化程序设计的提升以及智能指针与句柄类之间的互操作性。通过实例展示了如何在类中实现智能指针,以及如何利用句柄类来管理对象的生命周期,同时介绍了计数器在不同场景下的应用策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

句柄类是管理基类指针的类,“智能指针”的类其实就是句柄类。智能指针都有一个对应的计数器,这个计数器可以在智能指针指向的对象中,在“C++中的智能指针”中就是这样的;也可以在句柄类中。这两种有一些区别。

当计数器在智能指针对象的内部时,我们需要在类的外层加一层包装,之前用Ptr类,但是为了用计数器,在类Ptr外层包装了U_Ptr类。如下图:


其实还可以计数器和指针对象的分离,把计数器放到句柄类中,在“C++中的智能指针”以看到,不用在每一个句柄类中放一个计数器,句柄类要共有一个计数器;可以在句柄类使用一个计数器指针,这个指针对象公共的对象。这样做是模块化程序更高了,但是模块并没有更复杂。另外还可以把计数器写成类,计数器也“智能”。

[cpp]  view plain  copy
  1. class HasPtr{    
  2. public:    
  3.         HasPtr(int *p, int i):ptr(new U_Ptr(p)),val(i){}    
  4.                 
  5.         //重新实现复制否造函数    
  6.         HasPtr(const HasPtr &orig):    
  7.             ptr(orig.ptr),val(orig.val){++ptr->use;}    
  8.         HasPtr&operator=(const HasPtr& rhs);    
  9.         //获取成员变量的接口    
  10.         int *get_ptr()const { return ptr->ip;}    
  11.         int get_int const {return val;}    
  12.         //设置成员变量的接口    
  13.         void set_per(int *p){ptr->ip=p;}    
  14.         void set_int(int i){val=i;}    
  15.             
  16.         int get_ptr_val()const {return *ptr->ip;}    
  17.         int set_ptr_val(int val)const {*prt->ip=val;}//指针的值没变,所以可以为const         
  18.             
  19. private:    
  20.     Ptr *ptr;    
  21.     size_t *ust;    
  22. }    

计数器的分离,不用重写U_Prt类,而Ptr指针还可以指向其基类对象。

但是当把HasPtr作为类Ptr的友元时,还是要改类Ptr的代码的(添加友元);如果智能指针指向其基类,也要在基类中添加友元,因为友元不能继承。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值