1、基本使用
shared_ptr<A> p=make_shared<A>();
上述方法可以滿足大多數需求,同時也是最好、最安全的shared_ptr使用方式。
2、傳回share_ptr形式的this指針
class A : public enable_shared_from_this<A>
{
public:
shared_ptr<A> GetThis()
{
return shared_from_this();
}
}
原則就是盡量不要和原生指針打交道,是以這種方法傳回this是推薦的。但是很多時候容易出抛出bad_weak_ptr的異常,在不明白shared_from_this内部機制的前提下,要解決起來也不是那麼容易。
https://blog.csdn.net/yockie/article/details/40213331
3、将原生指針包裝成shared_ptr
//使用shared_ptr包裝this原生指針
shared_ptr<A> ptr(this);
這種方法可以代替2中所述方法,但問題是兩個shared_ptr指向了同一塊記憶體,當一個shared_ptr的計數器為0釋放以後,另一個shared_ptr懸空。或者導緻兩次記憶體釋放。
4、share_ptr重置内部的原生指針
shared_ptr<A> ptr=make_shared<A>();
ptr.reset(new A());
5、shared_ptr的複制
shared_ptr對象拷貝複制的内部機制就是包含的原生指針類型不變,計數器加1。是以在寫包含有shared_ptr成員的class的時候并不用像包含原生指針的class那樣建立專門的拷貝構造、移動構造函數。直接按對象淺拷貝share_ptr對象即可,換言之,使用預設的拷貝構造和指派構造函數即可。