TR1里提供了两种smart pointer, shared_ptr和weak_ptr。shared_ptr通过引用计数管理资源,而weak_ptr主要是为了避免死锁问题。
shared_ptr有一个get成员函数,可以得到内部的资源指针。weak_ptr没有这样的函数,所以如果需要从weak_ptr里得到资源指针,必须先把weak_ptr转化为shared_ptr,可以通过构造函数和weak_ptr的lock成员函数来实现,两者的区别是,如果weak_ptr已经过期,构造函数会抛出异常,而lock函数不会。所谓过期(expired),是指weak_ptr指向的资源已经被释放了。可以通过weak_ptr的expired函数来确定它是否已经过期。
use_count,reset和swap等成员函数,意义都很明显。use_count是当前拥有该资源的引用计数,reset是释放所有权,swap是交换所有权。
shared_ptr在构造函数里面可以指定一个deleter,当引用计数为0时,通过deleter来释放资源。如果没有指定deleter,则使用默认的delete操作符删除内部的指针。