shared_ptr weak_ptr是C++ tr1中最具有实用性的一个工具。利用C++的析构函数与引用计数,提供资源自动管理的能力。在vs2010之前,大家用的都是boost中的smartptr库,现在vs2010已经提供了tr1类库。

shared_ptr:

每一个shared_ptr对象内部,拥有两个指针ref_ptr与res_ptr,一个指向引用计数对象,一个指向实际的资源。

在shared_ptr的拷贝构造等需要创造出其他拥有相同资源的shared_ptr对象时,会首先增加引用计数,然后将ref_ptr与res_ptr复值给新对象。

发生析构时,减小引用计数,查看是否为0,如果是,则释放res_ptr与ref_ptr。

weak_ptr简单介绍:

weak_ptr的引入,我认为是smart_ptr概念的一个补全。一个raw指针,其实有两个含义,一是管理资源的句柄(拥有对象),一是指向一个资源的指针(不拥有对象)。举个例子,一般我们创建一个对象,在使用完之后销毁,那这个指针是拥有那个对象的,指针的作用域就是这个对象的生命周期,这个指针就是第一类指针。我们在使用observer模式时,被监测对象经常会持有所有observer的指针,以便在有更新时去通知他们,但是他并不拥有那些对象,这类指针就是第二类指针。在引入smart_ptr之前,资源的创建与释放都是调用者来做决定,所以一个指针是哪一类,完全由程序员自己控制。但是smart_ptr引入之后,这个概念就凸显出来。试想,在observer例子中,我们不会容许一个对象因为他是某一个对象的观察者就无法被释放。weak_ptr就是第二类指针的实现,他不拥有资源,当需要时,他可以通过lock获得资源的短期使用权。