std::enable_shared_from_this::shared_from_this - cppreference.com (original) (raw)

C++

Compiler support
Freestanding and hosted
Language
Standard library
Standard library headers
Named requirements
Feature test macros (C++20)
Language support library
Concepts library (C++20)
Diagnostics library
Memory management library
Metaprogramming library (C++11)
General utilities library
Containers library
Iterators library
Ranges library (C++20)
Algorithms library
Strings library
Text processing library
Numerics library
Date and time library
Input/output library
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Technical specifications
Symbols index
External libraries

[edit]

Memory management library

voidify(exposition only*) Allocators allocator allocator_traits(C++11) allocation_result(C++23) scoped_allocator_adaptor(C++11) pmr::polymorphic_allocator(C++17) allocator_arg(C++11) uses_allocator(C++11) uses_allocator_construction_args(C++20) make_obj_using_allocator(C++20) uninitialized_construct_using_allocator(C++20) Uninitialized memory algorithms uninitialized_copy uninitialized_fill uninitialized_move(C++17) uninitialized_copy_n(C++11) uninitialized_fill_n uninitialized_move_n(C++17) construct_at(C++20) uninitialized_default_construct(C++17) uninitialized_value_construct(C++17) destroy(C++17) uninitialized_default_construct_n(C++17) uninitialized_value_construct_n(C++17) destroy_n(C++17) destroy_at(C++17) Constrained uninitialized memory algorithms ranges::uninitialized_copy(C++20) ranges::uninitialized_fill(C++20) ranges::uninitialized_move(C++20) ranges::uninitialized_copy_n(C++20) ranges::uninitialized_fill_n(C++20) ranges::uninitialized_move_n(C++20) ranges::construct_at(C++20) ranges::uninitialized_default_construct(C++20) ranges::uninitialized_value_construct(C++20) ranges::destroy(C++20) ranges::uninitialized_default_construct_n(C++20) ranges::uninitialized_value_construct_n(C++20) ranges::destroy_n(C++20) ranges::destroy_at(C++20) Memory resources pmr::memory_resource(C++17) pmr::get_default_resource(C++17) pmr::set_default_resource(C++17) pmr::new_delete_resource(C++17) pmr::pool_options(C++17) pmr::null_memory_resource(C++17) pmr::synchronized_pool_resource(C++17) pmr::unsynchronized_pool_resource(C++17) pmr::monotonic_buffer_resource(C++17) Explicit lifetime management start_lifetime_as(C++23) start_lifetime_as_array(C++23) Types for composite class design indirect(C++26) polymorphic(C++26) Uninitialized storage (until C++20) raw_storage_iterator(until C++20*) get_temporary_buffer(until C++20*) return_temporary_buffer(until C++20*) Garbage collector support (until C++23) declare_reachable(C++11)(until C++23) declare_no_pointers(C++11)(until C++23) pointer_safety(C++11)(until C++23) undeclare_reachable(C++11)(until C++23) undeclare_no_pointers(C++11)(until C++23) get_pointer_safety(C++11)(until C++23) Low level memory management operator newoperator new[] operator deleteoperator delete[] nothrow_t nothrow new_handler set_new_handler get_new_handler(C++11) bad_alloc bad_array_new_length(C++11) align_val_t(C++17) destroying_delete_t(C++20) launder(C++17) Smart pointers unique_ptr(C++11) shared_ptr(C++11) weak_ptr(C++11) auto_ptr(until C++17*) owner_less(C++11) owner_less(C++17) owner_hash(C++26) owner_equal(C++26) enable_shared_from_this(C++11) bad_weak_ptr(C++11) default_delete(C++11) out_ptr_t(C++23) inout_ptr_t(C++23) Miscellaneous pointer_traits(C++11) to_address(C++20) addressof(C++11) align(C++11) assume_aligned(C++20) is_sufficiently_aligned(C++26) C Library malloc calloc realloc free aligned_alloc(C++17)

[edit]

std::enable_shared_from_this

Protected member functions
enable_shared_from_this::enable_shared_from_this
enable_shared_from_this::~enable_shared_from_this
enable_shared_from_this::operator=
Public member functions
enable_shared_from_this::shared_from_this
enable_shared_from_this::weak_from_this(C++17)

[edit]

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.

Contents

[edit] Return value

std::shared_ptr<T>(_[weakthis](../enable%5Fshared%5Ffrom%5Fthis.html#weak%5Fthis "cpp/memory/enable shared from this")_ )

[edit] 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 std::shared_ptr constructor.

[edit] Example

Run this code

#include #include   struct Foo : public std::enable_shared_from_this { Foo() { std::cout << "Foo::Foo\n"; } Foo() { std::cout << "Foo::Foo\n"; } std::shared_ptr getFoo() { return shared_from_this(); } };   int main() { Foo *f = new Foo; std::shared_ptr pf1;   { std::shared_ptr 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

[edit] See also

shared_ptr(C++11) smart pointer with shared object ownership semantics (class template) [edit]