共用方式為


enable_shared_from_this 類別

幫助產生 shared_ptr

語法

class enable_shared_from_this {
public:
    shared_ptr<Ty>
        shared_from_this();
    shared_ptr<const Ty> shared_from_this() const;
    weak_ptr<T> weak_from_this() noexcept;
    weak_ptr<T const> weak_from_this() const noexcept;
protected:
    enable_shared_from_this();
    enable_shared_from_this(const enable_shared_from_this&);
    enable_shared_from_this& operator=(const enable_shared_from_this&);
    ~enable_shared_from_this();
};

參數

Ty
共用指標所控制的類型。

備註

衍生自 enable_shared_from_this 的物件可以使用成員函式中的 shared_from_this 方法,來建立執行個體的 shared_ptr 擁有者,其與現有 shared_ptr 擁有者共用擁有權。 否則,如果您使用 this 建立新的 shared_ptr,它與現有 shared_ptr 擁有者不同,可能會導致參考無效,或物件遭到重複刪除。

建構函式、解構函式和指派運算子會受到保護以防止意外誤用。 樣板自變數類型 Ty 必須是衍生類別的類型。

如需使用方式的範例,請參閱 enable_shared_from_this::shared_from_this

shared_from_this

產生的 shared_ptr 會與現有的 shared_ptr 擁有者共用執行個體擁有權。

shared_ptr<T> shared_from_this();
shared_ptr<const T> shared_from_this() const;

備註

當您從 enable_shared_from_this 基底類別衍生物件時,shared_from_this 範本成員函式會傳回 shared_ptr 類別物件,其與現有的 shared_ptr 擁有者共用此執行個體的擁有權。 否則,如果您從 this 建立新的 shared_ptr,它與現有 shared_ptr 擁有者不同,可能會導致參考無效,或物件遭到重複刪除。 如果 shared_ptr 物件不再擁有某個執行個體,而您呼叫其中的 shared_from_this,則行為是未定義的。

範例

// std_memory_shared_from_this.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>

using namespace std;

struct base : public std::enable_shared_from_this<base>
{
    int val;
    shared_ptr<base> share_more()
    {
        return shared_from_this();
    }
};

int main()
{
    auto sp1 = make_shared<base>();
    auto sp2 = sp1->share_more();

    sp1->val = 3;
    cout << "sp2->val == " << sp2->val << endl;
    return 0;
}
sp2->val == 3

weak_from_this

weak_ptr<T> weak_from_this() noexcept;
weak_ptr<T const> weak_from_this() const noexcept;