Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

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
       existing
	  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		  Cor-
       rect 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)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::enable_shared_from_this::shared_from_this&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help