3.2 KiB
[util.smartptr.enab]
20 Memory management library [mem]
20.3 Smart pointers [smartptr]
20.3.2 Shared-ownership pointers [util.sharedptr]
20.3.2.7 Class template enable_shared_from_this [util.smartptr.enab]
A class T can inherit from enable_shared_from_this to inherit the shared_from_this member functions that obtain a shared_ptr instance pointing to *this.
[Example 1: struct X: public enable_shared_from_this { };
int main() { shared_ptr p(new X); shared_ptr q = p->shared_from_this(); assert(p == q); assert(p.owner_equal(q)); // p and q share ownership} â end example]
namespace std {template class enable_shared_from_this {protected:constexpr enable_shared_from_this() noexcept; constexpr enable_shared_from_this(const enable_shared_from_this&) noexcept; constexpr enable_shared_from_this& operator=(const enable_shared_from_this&) noexcept; constexpr ~enable_shared_from_this(); public:constexpr shared_ptr shared_from_this(); constexpr shared_ptr shared_from_this() const; constexpr weak_ptr weak_from_this() noexcept; constexpr weak_ptr weak_from_this() const noexcept; private:mutable weak_ptr weak-this; // exposition only};}
The template parameter T of enable_shared_from_this may be an incomplete type.
constexpr enable_shared_from_this() noexcept; constexpr enable_shared_from_this(const enable_shared_from_this<T>&) noexcept;
Effects: Value-initializes weak-this.
constexpr enable_shared_from_this<T>& operator=(const enable_shared_from_this<T>&) noexcept;
Returns: *this.
[Note 1:
weak-this is not changed.
â end note]
constexpr shared_ptr<T> shared_from_this(); constexpr shared_ptr<T const> shared_from_this() const;
Returns: shared_ptr(weak-this).
constexpr weak_ptr<T> weak_from_this() noexcept; constexpr weak_ptr<T const> weak_from_this() const noexcept;
Returns: weak-this.