FreeBSD Manual Pages
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)
NAME | Synopsis | Return value | Exceptions | Example | Output: | See also
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>
