在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的功能是相同的,只是它是用来处理数组的,这里不再介绍