A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://en.cppreference.com/w/cpp/memory/shared_ptr/../enable_shared_from_this/shared_from_this.html below:

std::enable_shared_from_this<T>::shared_from_this - cppreference.com

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<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)


[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>(weak_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 <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 semantics
(class template) [edit]

RetroSearch 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