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;