特别提醒
使用智能指针要注意,一个堆对象只能由一个智能指针系统管理,千万不要做如下的事情:
T *a = new T;
shared_ptr<T> b(a);
shared_ptr<T> c(a); // 错误!a指向的堆对象被删除两次
正确的做法是,对象一经创建,应该立即赋值给某个智能指针管理,只能赋值给一个。
如需要共享对象的所有权,应该先初始化一个shared_ptr实例,再将这个实例赋值给另外一个实例:
shared_ptr<T> a(new T); // 先初始化一个shared_ptr实例
shared_ptr<T> b = a; // 再将这个实例赋值给另外一个实例