共用方式為


shared_ptr Class

包裝在旁邊的智慧型指標動態配置物件的參考計數。

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
    deleter 類型。

  • A
    配置器類型。

  • dtor
    deleter。

  • alloc
    配置器。

  • sp
    複製或移動的智慧型指標。

  • wp
    複製或移動的弱式指標。

  • ap
    複製或移動的自動指標。

  • up
    移動的唯一的指標。

備註

樣板類別描述物件會使用參考次數處理資源。 shared_ptr 物件的有效地保留指向它擁有或保留 Void 指標的資源。 資源可以由多個 shared_ptr 物件擁有;當擁有特定資源時終結的最後一個 shared_ptr 物件,資源被釋放。

當重新配置它或重設時, shared_ptr 停止擁有資源。

樣板引數 Ty 可能除非另外指出是一個不完整型別的某些成員函式的。

當在建構 shared_ptr<Ty> 物件為 G* 資源指標或刪除 shared_ptr<G>時,指標型別 G* 必須可以轉換為 Ty*。 如果不是,則程式碼無法編譯。 例如:

class F {};
class G : public F {};

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> sp4(new G); // error, G* not convertible to int*
shared_ptr<int> sp5(sp2);   // error, template parameter int and argument shared_ptr<F>

shared_ptr 物件擁有資源:

  • 如果建構時該資源的指標,

  • 如果是從擁有該資源的 shared_ptr 物件建構時,

  • 如果是從指向該資源或 weak_ptr Class 的物件建構時

  • 如果該資源擁有權指派給它,與 shared_ptr::operator= 或呼叫 shared_ptr::reset成員函式。

shared_ptr 物件中擁有資源共用每控制區塊。 控制區塊保持:

  • shared_ptr 物件數目中擁有資源,

  • weak_ptr 物件數目對資源的該點,

  • 該資源的 deleter,如果有的話,

  • 控制區塊的自訂配置器,如果有的話。

初始化使用 null 指標的 shared_ptr 物件有一個控制區塊並不是空的。 在 shared_ptr 物件釋放資源後,它就不會擁有該資源。 在 weak_ptr 物件釋放資源後,不再它對該資源的點。

shared_ptr 物件數目中擁有一資源變成零,資源會刪除它釋放,或傳遞其位址。deleter,根據資源的擁有權如何最初建立。 當 shared_ptr 物件數目中擁有資源是零,因此, weak_ptr 物件數目該資源的該點是零,控制區塊被釋放,使用控制區塊的自訂配置器,如果有的話。

空白的 shared_ptr 物件不屬於任何資源並沒有控制區塊。

deleter 有 10% operator()成員函式的函式物件。 其型別必須是可建構的複本,因此,它的複製建構函式和解構函式不能擲回例外狀況。 它接受參數,將刪除的物件。

有些函式採用定義產生的 shared_ptr<Ty> 或 weak_ptr<Ty> 物件屬性的引數清單。 您可以在幾種方式可以指定這個引數清單:

沒有引數。--產生的物件為空白的 shared_ptr 物件或空的 weak_ptr 物件。

ptr -- Other* 型別指標是資源的 Managed。 Ty 必須是完整類別型別。 如果函式失敗 (因為不可以配置的控制區塊) 以評估 delete ptr運算式。

ptr, dtor -- Other* 型別的指標要處理的資源和該資源的 deleter。 如果函式失敗 (因為不可以配置的控制區塊),它會呼叫 dtor(ptr),必須是明確定義的。

ptr, dtor, alloc -- Other* 型別指標是資源的 Managed,一 deleter 該資源和配置器的可以處理必須配置和釋放的任何儲存區。 如果函式失敗 (因為不可以配置的控制區塊) 會呼叫 dtor(ptr),必須是明確定義的。

sp --擁有資源是管理的 shared_ptr<Other> 物件。

wp --指向資源是管理的 weak_ptr<Other> 物件。

ap --一個 auto_ptr<Other> 物件保持指標為 Managed 資源。 如果函式成功呼叫 ap.release();否則會保留 ap 未變更。

在所有情況下,指標型別 Other* 必須可以轉換為 Ty*。

執行緒安全

多執行緒可讀取和寫入,不同的 shared_ptr 相同物件時,,即使物件是共用擁有權的複本。

Members

Bb982026.collapse_all(zh-tw,VS.110).gif建構函式

shared_ptr::shared_ptr

建構 shared_ptr。

shared_ptr::~shared_ptr

終結 shared_ptr。

Bb982026.collapse_all(zh-tw,VS.110).gif方法

shared_ptr::element_type

項目的型別。

shared_ptr::get

取得資源的位址。

shared_ptr::owner_before

傳回 true,否則為 shared_ptr (或小於) 提供的指標之前已排序。

shared_ptr::reset

replace 資源。

shared_ptr::swap

交換兩個 shared_ptr 物件。

shared_ptr::unique

測試,如果資源是唯一的。

shared_ptr::use_count

計算資源擁有者數字。

Bb982026.collapse_all(zh-tw,VS.110).gif運算子

shared_ptr::operator boolean-type

測試,如果資源存在。

shared_ptr::operator*

取得指定的值。

shared_ptr::operator=

取代特定資源。

shared_ptr::operator->

取得指標所指派的值。

需求

標題: <memory>

命名空間: 可以

請參閱

參考

weak_ptr Class

在標準 C++ 程式庫中的執行緒安全

其他資源

<memory> 成員