欢迎访问我的独立博客

【Boost】系列03:内存管理之shared_ptr智能指针

最有价值的!最有用的引用计数型智能指针,可以被拷贝和赋值,可以作为STL容器的元素;

1,基本用法:

#include <boost/smart_ptr.hpp>
#include <assert.h>
using namespace boost;
int main()
{
    shared_ptr<int> sp(new int(10));
    assert(sp.unique());

    shared_ptr<int> sp2 = sp;
    assert(sp == sp2 && sp.use_count() == 2);
    *sp2 = 100;
    assert(*sp == 100);

    sp.reset();
    assert(!sp);

    return 0;
}

2,make_shared用法:

#include <boost/smart_ptr.hpp>
#include <vector>
#include <boost/make_shared.hpp>
using namespace std;
using namespace boost;

int main()
{

    typedef vector<shared_ptr<int> > vs;
    vs v(10);

    int i = 0;
    for (vs::iterator pos = v.begin(); pos != v.end(); ++pos)
    {
        (*pos) = make_shared<int>(++i);
        cout<<*(*pos)<<", ";
    }
    cout<<endl;

    cout<<v[9].use_count()<<endl;
    cout<<"v[9]="<<*v[9]<<endl;    

    shared_ptr<int> p = v[9];
    cout<<v[9].use_count()<<endl;
    *p = 100;
    cout<<*v[9]<<endl;

    return 0;
}

输出:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10,

1

v[9]=10

2

100

posted @ 2012-11-08 17:03  github.com/starRTC  阅读(312)  评论(0编辑  收藏  举报