10-boost-智能指针

class A{

public:

A(int a):m_a(a){}

~A(){}

int m_a;

}


#include<memory>


1、auto_ptr

auto_ptr<A> a1(new A(100))

auto_ptr<A> a2(a1) 或 auto_ptr<A> a2=a1 之后 a1 不再存在

2、scoped_ptr

#include<boost/scoped_ptr.hpp>

using namespace boost


scoped_ptr <A> a2(a1) 或 scoped_ptr <A> a2=a1 或保存 防止a1消失


3、scoped_array 智能数组指针

#include<boost/scoped_array.hpp>

scoped_array<A> a1(new A[5])

for(int i=0;i<5;i++){

a1[i].m_a = i;

}

cout << a1[2].m_a <<endl;

4、shared_ptr 共享所有权的智能指针

#include<boost/make_shared.hpp>


boost::shared_ptr<A> p1(new int(5))

p1.unique() 返回0或1 是否唯一

p1.use_count() 获取共享个数


5、weak_ptr 弱引用智能指针

shared_ptr <A> p1 = new A(int(3))

weak_ptr<A> p2 = p1;

p2.expired() 返回0 或1 是否过期,是否还有引用

p1.unset() 释放p1

shared_ptr <A> p3 = p2.lock()