一个实现智能指针的例子《还不完善》

#ifndef COUNTED_PTR_HPP
#define COUNTED_PTR_HPP

templete <class T>
class CountedPtr{
    private:
        T * ptr;
        long * count;

    public:
        explicit CountedPtr (T * p = 0)
            :ptr(p) , count(new long(1)){
            }
        CountedPtr (const CountedPtr<T> & p) throw()
            : ptr(p.ptr) , count(p.count){
                ++*count;
            }
        ~CountedPtr() throw() {
            dispose();
        }
        CountedPtr<T> & operator= (const CountedPtr<T>& p) throw (){
            if (this != &p){
                dispose();
                ptr = p.ptr;
                count = p.count;
                ++*count;
            }
            return *this;
        }

        T & operator*() const throw(){
            return *ptr;
        }
        T* operator->() const throw(){
            return ptr;
        }
    private:
    void dispose(){
        if (--*count ==0){
            delete count;
            delete ptr;
        } 
    }
}
#endif  /*COUNTED_PTR_HPP*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值