从c++的角度理解java的引用

从c++的角度理解java的引用

小部分理解(并不完全)

#ifndef HANDLE_HPP
#define HANDLE_HPP

template<class T>
class jptr{ 
    public:
    T* p;
    int *pcount;
	
    jptr(T *w):pcount(new int(1)),p(w){}    
    jptr():pcount(new int(1)),p(nullptr){}    
    jptr(const jptr& hw)
    {	 
    	   p=hw.p;
	   pcount=hw.pcount;
	   ++(*hw.count);
    }
    template<class t>
    jptr& operator=(const t& hw)
     {
          ++*hw.pcount;
      decrs();
      p = hw.p;
      pcount = hw.pcount;
      return *this;
     }
	    T *operator->()const
     {
      return p;
     }
     int count()
     {
      return *pcount;
     }
     T operator*()const
     {
      return *p;
     }
     template<class t>
     operator jptr<t>()
     {
      jptr<t> tmp(dynamic_cast<t*>(p));
      tmp.pcount = pcount;
      ++*pcount;
      return tmp;
     }
     ~jptr()
     {
      decrs();
     {
    private:
     void decrs()
     {
     	     --*count;
     	    if(*pcount==0){
     	    delete pcount;
 	    if(p)
 	    deletep;
            }
         }
 };
 #endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值