# std::enable_shared_from_this<T>::shared_from_this

< cpp‎ | memory‎ | enable shared from this

std::shared_ptr<T> shared_from_this(); | (1) |
std::shared_ptr<T const> shared_from_this() const; | (2) |

返回与所有指代 *this 的 std::shared_ptr 共享 *this 所有权的 std::shared_ptr<T> 。

等效地执行 std::shared_ptr<T>(weak_this) ，其中 `weak_this` 是 `enable_shared_from_this` 的私有 mutable std::weak_ptr<T> 成员。

### 注解

只容许在先前共享的对象，即 std::shared_ptr 所管理的对象上调用 `shared_from_this` 。（特别是不能在构造 *this 期间 `shared_from_this` 。）

否则行为未定义 (C++17 前)抛出 std::bad_weak_ptr （由参数为默认构造的 `weak_this` 的 shared_ptr 构造函数） (C++17 起)。

### 返回值

与之前存在的 std::shared_ptr 共享 *this 所有权的 std::shared_ptr<T> 。

### 示例

    #include <iostream>
    #include <memory>

    struct Foo : public std::enable_shared_from_this<Foo> {
        Foo() { std::cout << "Foo::Foo\n"; }
        ~Foo() { std::cout << "Foo::~Foo\n"; }
        std::shared_ptr<Foo> getFoo() { return shared_from_this(); }
    };

    int main() {
        Foo *f = new Foo;
        std::shared_ptr<Foo> pf1;

        {
            std::shared_ptr<Foo> pf2(f);
            pf1 = pf2->getFoo();  // 与 pf2 的对象共享所有权
        }

        std::cout << "pf2 is gone\n";
    }

输出：

    Foo::Foo
    pf2 is gone
    Foo::~Foo

### 参阅

shared_ptr (C++11) | 拥有共享对象所有权语义的智能指针 (类模板)