home | help
std::enable...d_from_this(3)   C++ Standard Libary  std::enable...d_from_this(3)

NAME
     std::enable_shared_from_this::shared_from_this	     -		std::en-
     able_shared_from_this::shared_from_this

Synopsis
	std::shared_ptr<T> shared_from_this();		   (1) (since C++11)
	std::shared_ptr<T const> shared_from_this() const; (2) (since C++11)

	Returns a std::shared_ptr<T> that shares ownership of *this with all ex-
     isting
	std::shared_ptr that refer to *this.

	Effectively executes std::shared_ptr<T>(weak_this), where  weak-this  is
     the
	exposition-only     mutable	std::weak_ptr<T>     member    of    en-
     able_shared_from_this.

Return value
	std::shared_ptr<T> that shares ownership of *this with pre-existing
	std::shared_ptrs.

Exceptions
	If shared_from_this is called on an object that is not previously shared
     by
	std::shared_ptr, std::bad_weak_ptr is thrown  (by  the	shared_ptr  con-
     structor from a
	default-constructed weak-this).

Example
     // Run this code

      #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(); // shares ownership of object with pf2
	  }

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

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

	Defect reports

	The  following	behavior-changing  defect  reports were applied retroac-
     tively to
	previously published C++ standards.

	   DR	 Applied to	   Behavior  as  published		 Correct
     behavior
			    calling shared_from_this on an
	LWG	2529	 C++11		unshared     object	was    undefined
     std::bad_weak_ptr is thrown
			    behavior

See also
	shared_ptr smart pointer with shared object ownership semantics
	(C++11)    (class template)

http://cppreference.com 	   2024.06.10	    std::enable...d_from_this(3)

home | help