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)
	  std::shared_ptr<T const> shared_from_this() const; (2)

	  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 private
	  mutable std::weak_ptr<T> member of enable_shared_from_this.

Notes
	  It is	permitted to call shared_from_this only	on a previously	shared
       object, i.e. on
	  an	object	  managed    by	   std::shared_ptr   (in   particular,
       shared_from_this	cannot be
	  called during	construction of	*this).

	  Otherwise
	  the behavior is undefined
	  (until C++17)
	  std::bad_weak_ptr is thrown (by the shared_ptr constructor from a
	  default-constructed weak_this)
	  (since C++17).

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

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

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

http://cppreference.com		  2022.07.31	  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.0>

home | help