(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)
(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)
(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)
(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*)
(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(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<void>(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)
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 valuestd::shared_ptr<T>(weak_this
)
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.
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[edit] See also shared_ptr
(C++11)
smart pointer with shared object ownership semanticsRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4