c++之智能指针

设计出一个class像指针,但是功能更强大,分为两种形式一种是标准库的源代码,早期的指针,多半是重载*和->,第二种是迭代器的智能指针

1.早期的智能指针

template<class T>
class shared_ptr
{
public:
    T& operator*() const{
        return *px;
       }
    T& operator->() const{
        return px;
       }
    shared_ptr(T* p) :px(p){}
private:
    T*  px;
    long* pn;

''''
};
struct foo{
    ...
    void method(void){}
};

shared_ptr<foo> sp(new foo);
foo f(*sp);
sp->method();    //等同于px->method();

f(*sp)   sp代表指针,智能指针(*)响应返回*px

sp->method   sp代表指针,智能指针(->)响应返回px,此时就相当于px->method(),此处的->得到的东西要继续作用下去,所以没有被消耗。

2.迭代器作为另外一种智能指针

他需要重载++、--、*、->等,

template <class T>
struct _list_node{
    void* prev;
    void* next;
    T data;
};
template<class T,class Ref ,class ptr>
struct _list_iterator{
    typedef _list_iterator<T,ref,ptr>self;
    typedef ptr pointer;
    typedef Ref reference;
    typedef _list_node<T>* link_type;
    link_type node;
    T& Treference operator* ()const{
        return (*node).data;
        }
    T* pointer operator->() const {
        return &(operator*());
        }    
};
struct foo{
    ...
    void method(void){}
};

list<foo>::iterator ite;
*ite;   //获得一个foo object
ite->method();  //意思是调用foo::method()相当于(*ite).method() 也相当于(&(*ite))->method()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值