[boost]智能指针简介

在boost中的智能指针有:

scoped_ptr  --用于处理单个对象的唯一所有权,禁止复制

scoped_array  --类似scoped_ptr,但是是用来处理数组的

shared_ptr       --允许共享对象所有权

shared_arrar   --允许数组的所有权


scoped_ptr

private:

    T * px;

    scoped_ptr(scoped_ptr const &);
    scoped_ptr & operator=(scoped_ptr const &);

    typedef scoped_ptr<T> this_type;

    void operator==( scoped_ptr const& ) const;
    void operator!=( scoped_ptr const& ) const;

从class声明可以看到,scoped_ptr禁止拷贝构造、复制、==和!=,如果有:
boost::scoped_ptr<int> ip(new int(10));
boost::scoped_ptr<int> ix(ip);

实际编译都通过不了,因为这里调用了拷贝构造函数

scoped_array

和scoped_ptr意义是等价的,但是是用来处理数组的:
sr::dfc *p = new sr::dfc[10];
fill(p,p+10,10);
	
boost::scoped_array<sr::dfc> pa(p);
比如这个例子,这里指new了10个sr::dfc,并没有delete,实际在函数结束后,在scoped_array的析构函数中会调用sr::dfc的析构函数

shared_ptr

标准C++其实并没有提供引用计数的智能指针,但是boost提供了shared_ptr,使用引用计数实现的智能指针:
boost::shared_ptr<sr::dfc> ip(new sr::dfc(100));
boost::shared_ptr<sr::dfc> ix(ip);
boost::shared_ptr<sr::dfc> iy(ix);
这里只new了一个sr::dfc,然后调用了shared_ptr的拷贝构造函数,建立两个shared_ptr<sr::dfc>,这个时候,计数器会被置为3,当过了作用域时,先后调用这3个shared_ptr<sr::dfc>的析构函数,在析构中,会减少计数器的值,当值为0是,调用delete sr::dfc

shared_array

和shared_ptr的功能是相同的,只是它是用来处理数组的,这里不再介绍


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值