shared_ptr 類別
將參考計數的智慧型指標環繞動態配置物件。
template<class Ty>
class shared_ptr {
public:
typedef Ty element_type;
shared_ptr();
shared_ptr(nullptr_t);
shared_ptr(const shared_ptr& sp);
shared_ptr(shared_ptr&& sp);
template<class Other>
explicit shared_ptr(Other * ptr);
template<class Other, class D>
shared_ptr(Other * ptr, D dtor);
template<class D>
shared_ptr(nullptr_t, D dtor);
template<class Other, class D, class A>
shared_ptr(Other *ptr, D dtor, A alloc);
template<class D, class A>
shared_ptr(nullptr_t, D dtor, A alloc);
template<class Other>
shared_ptr(const shared_ptr<Other>& sp);
template<class Other>
shared_ptr(const shared_ptr<Other>&& sp);
template<class Other>
explicit shared_ptr(const weak_ptr<Other>& wp);
template<class Other>
shared_ptr(auto_ptr<Other>& ap);
template<class Other, class D>
shared_ptr(unique_ptr<Other, D>&& up);
template<class Other>
shared_ptr(const shared_ptr<Other>& sp, Ty *ptr);
~shared_ptr();
shared_ptr& operator=(const shared_ptr& sp);
template<class Other>
shared_ptr& operator=(const shared_ptr<Other>& sp);
shared_ptr& operator=(shared_ptr&& sp);
template<class Other>
shared_ptr& operator=(shared_ptr<Other>&& sp);
template<class Other>
shared_ptr& operator=(auto_ptr< Other >&& ap);
template <class Other, class D>
shared_ptr& operator=(const unique_ptr< Other, D>& up) = delete;
template <class Other, class D>
shared_ptr& operator=(unique_ptr<Other, D>&& up);
void swap(shared_ptr& sp);
void reset();
template<class Other>
void reset(Other *ptr);
template<class Other, class D>
void reset(Other *ptr, D dtor);
template<class Other, class D, class A>
void reset(Other *ptr, D dtor, A alloc);
Ty *get() const;
Ty& operator*() const;
Ty *operator->() const;
long use_count() const;
bool unique() const;
operator bool() const;
template<class Other>
bool owner_before(shared_ptr<Other> const& ptr) const;
template<class Other>
bool owner_before(weak_ptr<Other> const& ptr) const;
template<class D, class Ty>
D* get_deleter(shared_ptr<Ty> const& ptr);
};
參數
Ty
此型別被共用指標控制。Other
此型別被引數指標控制。ptr
複製的指標。D
刪除項的型別。A
分配項的型別。dtor
刪除項。alloc
配置項。sp
複製或移動的智慧型指標。wp
複製或移動的弱指標。ap
複製或移動的自動型指標。up
移動的單一指標。
備註
樣板類別描述使用參考次數處理資源的物件。 shared_ptr 物件有效地保留指向擁有或保留 null 指標的資源的指標。 資源可以由多個 shared_ptr 物件擁有;當擁有特定資源時終結的最後一個 shared_ptr 物件,資源被釋放。
shared_ptr 停止擁有資源,當重新配置或重設時。
樣板引數 Ty 可能是一個不完整型別,除非註釋為某些成員函式的。
當 shared_ptr<Ty> 物件為 G* 或 shared_ptr<G>所建構的資源指標時,指標型別 G* 必須可以轉換為 Ty*。 如果不是,則程式碼無法編譯。 例如:
class F {};
class G : public F {};
#include <memory>
using namespace std;
shared_ptr<G> sp0(new G); // okay, template parameter G and argument G*
shared_ptr<G> sp1(sp0); // okay, template parameter G and argument shared_ptr<G>
shared_ptr<F> sp2(new G); // okay, G* convertible to F*
shared_ptr<F> sp3(sp0); // okay, template parameter F and argument shared_ptr<G>
shared_ptr<F> sp4(sp2); // okay, template parameter F and argument shared_ptr<F>
shared_ptr<int> sp5(new G); // error, G* not convertible to int*
shared_ptr<int> sp6(sp2); // error, template parameter int and argument shared_ptr<F>
shared_ptr 物件擁有資源:
如果建構時有該資源的指標
如果是從擁有該資源的 shared_ptr 物件建構時
如果是從指向該資源的 weak_ptr 類別 物件建構
如果該資源擁有權指派給它,不是與 shared_ptr::operator= 就是呼叫 shared_ptr::reset成員函式。
擁有資源的shared_ptr 物件共用控制區塊。 控制區塊保持:
擁有資源的shared_ptr 物件,
指向資源的weak_ptr 物件數目,
如果有該資源的刪除項,
如果有控制區塊的自訂配置項。
初始化使用 null 指標的 shared_ptr 物件有一個控制區塊且不是空的。 在 shared_ptr 物件釋放資源後,它就不會擁有該資源。 在 weak_ptr 物件釋放資源後,它不再指向該資源。
當 shared_ptr 物件數目擁有之一資源變成零,資源會刪除它並釋放,或傳遞其位址給刪除項,根據資源的擁有權最初如何建立。 當 shared_ptr 物件數目中擁有資源是零,且 weak_ptr 物件數目該資源的該點是零,控制區塊被釋放,如果有控制區塊的自訂配置器則使用它。
空的 shared_ptr 物件不屬於任何資源並沒有控制區塊。
刪除項是有 operator()成員函式的函式物件。 其型別必須是可建構的複本,因此,它的複製建構函式和解構函式不能擲回例外狀況。 它接受參數,將刪除的物件。
有些函式採用定義產生的 shared_ptr<Ty> 或 weak_ptr<Ty> 物件屬性的引數清單。 您可以在幾種方式中指定這個引數清單:
沒有引數。--產生的物件為空的 shared_ptr 物件或空的 weak_ptr 物件。
ptr -- 一個型別 (Other*) 指向被管理的資源的指標。 Ty 必須是完整型別。 如果函式失敗 (因為控制區塊不可以配置) 將評估 delete ptr運算式。
ptr, dtor -- Other* 型別指向要處理資源和該資源的刪除項的指標。 如果函式失敗 (因為控制區塊不可以配置),它會呼叫 dtor(ptr),必須是明確定義的。
ptr, dtor, alloc -- Other* 型別指向管理資源的指標、該資源的刪除項和可以處理必須被配置和釋放的任何儲存區的配置器的指標。 如果函式失敗 (因為控制區塊不可以配置),它會呼叫 dtor(ptr),必須是明確定義的。
sp --擁有管理資源的 shared_ptr<Other> 物件。
wp --指向管理資源的 weak_ptr<Other> 物件。
ap --擁有指向管理資源指標的 auto_ptr<Other> 物件。 如果函式成功會呼叫 ap.release();否則會保留 ap 未變更。
在所有情況下,指標型別 Other* 必須可以轉換為 Ty*。
執行緒安全
多執行緒可同時讀取和寫入不同的 shared_ptr 物件,即使物件是共用擁有權的複本。
成員
建構函式
建構 shared_ptr。 |
|
終結 shared_ptr。 |
方法
項目的類型。 |
|
取得資源的位址。 |
|
傳回 true,否則此 shared_ptr 會排在(或小於) 在提供的指標之前。 |
|
取代擁有資源。 |
|
交換兩個 shared_ptr 物件。 |
|
請測試,如果資源是唯一的。 |
|
計算資源擁有者的數目。 |
運算子
請測試,如果資源存在。 |
|
取得指派值。 |
|
取代擁有資源。 |
|
取得指向指派值的指標。 |
需求
標頭: <memory>
命名空間: std