Namespaces
Variants
Views
Actions

std::shared_ptr

From cppreference.com
 
 
 
 
 
Defined in header <memory>
template< class T > class shared_ptr;
(since C++11)

std::shared_ptr is a smart pointer that retains shared ownership of an object through a pointer. Several shared_ptr objects may own the same object; the object is destroyed when the last remaining shared_ptr pointing to it is destroyed or reset. The object is destroyed using delete-expression or a custom deleter that is supplied to shared_ptr during construction.

A shared_ptr may also own no objects, in which case it is called empty.

shared_ptr meets the requirements of CopyConstructible and CopyAssignable.

Contents

[edit] Member types

Member type Definition
element_type T

[edit] Member functions

constructs new shared_ptr
(public member function) [edit]
destructs the owned object if no more shared_ptrs link to it
(public member function) [edit]
assigns the shared_ptr
(public member function) [edit]
Modifiers
replaces the managed object
(public member function) [edit]
swaps the managed objects
(public member function) [edit]
Observers
returns a pointer to the managed object
(public member function) [edit]
dereferences pointer to the managed object
(public member function) [edit]
returns the number of shared_ptr objects referring to the same managed object
(public member function) [edit]
checks whether the managed object is managed only by the current shared_ptr instance
(public member function) [edit]
checks if there is associated managed object
(public member function) [edit]
provides owner-based ordering of shared pointers
(public member function) [edit]

[edit] Non-member functions

creates a shared pointer that manages a new object
(function template) [edit]
creates a shared pointer that manages a new object allocated using an allocator
(function template) [edit]
applies static_cast, dynamic_cast or const_cast to the type of the managed object
(function template) [edit]
returns the deleter of specified type, if owned
(function template) [edit]
compares with another shared_ptr or with nullptr
(function template) [edit]
outputs the value of the managed pointer to an output stream
(function template) [edit]
specializes the std::swap algorithm
(function template) [edit]
specializes atomic operations
(function template) [edit]

[edit] Helper classes

hash support for std::shared_ptr
(class template specialization) [edit]

[edit] Implementation notes

In a typical implementation, std::shared_ptr holds a pointer to the referenced object and a pointer to control block, which is a dynamically-allocated object that holds a pointer to the managed object, the deleter, the allocator, the number of shared_ptrs that own the managed object, and the number of weak_ptrs that refer to the managed object. When shared_ptr is created by calling std::make_shared or std::allocate_shared, the control block holds the managed object directly, as a data member. The pointer held by the shared_ptr directly is the one returned by get(), while the pointer/object held by the control block is the one that will be deleted when the number of shared owners reaches zero: these pointers are not necessarily equal. The destructor of shared_ptr decrements the number of shared owners of the control block, and if that reaches zero, the control block calls the destructor of the managed object, but the control block does not deallocate itself until the std::weak_ptr counter reaches zero as well.