[#bsl-shared_ptr-0a-2constructor-03f] = xref:bsl.adoc[bsl]::xref:bsl/shared_ptr-0a.adoc[shared_ptr]::shared_ptr :relfileprefix: ../../ :mrdocs: Constructors == Synopses Declared in `<bslstl_sharedptr.h>` Create an empty shared pointer, i.e., a shared pointer with no representation that does not refer to any object and has no deleter. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- constexpr xref:bsl/shared_ptr-0a/2constructor-08b.adoc[shared_ptr]() noexcept; ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-08b.adoc[_» more..._]# Copy‐construct a `shared_ptr` from `original`. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- xref:bsl/shared_ptr-0a/2constructor-04.adoc[shared_ptr](xref:bsl/shared_ptr-0a.adoc[shared_ptr] const& original) noexcept; ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-04.adoc[_» more..._]# Create a `shared_ptr` sharing ownership with a compatible `other`. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class COMPATIBLE_TYPE> xref:bsl/shared_ptr-0a/2constructor-0b.adoc[shared_ptr](xref:bsl/shared_ptr-0a.adoc[shared_ptr<COMPATIBLE_TYPE>] const& other) noexcept; ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-0b.adoc[_» more..._]# Move‐construct a `shared_ptr` from a compatible `other`. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class COMPATIBLE_TYPE> xref:bsl/shared_ptr-0a/2constructor-0731.adoc[shared_ptr](xref:bsl/shared_ptr-0a.adoc[shared_ptr<COMPATIBLE_TYPE>]&& other) noexcept; ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-0731.adoc[_» more..._]# Create an empty shared pointer, i.e., a shared pointer with no representation that does not refer to any object and has no deleter. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- constexpr xref:bsl/shared_ptr-0a/2constructor-00f.adoc[shared_ptr](xref:bsl/nullptr_t-08.adoc[bsl::nullptr_t] nullPointerLiteral) noexcept; ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-00f.adoc[_» more..._]# Move‐construct a `shared_ptr` from `original`. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- xref:bsl/shared_ptr-0a/2constructor-077.adoc[shared_ptr](xref:BloombergLP/bslmf/MovableRef.adoc[BloombergLP::bslmf::MovableRef<shared_ptr>] original) noexcept; ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-077.adoc[_» more..._]# Create a `shared_ptr` from a `weak_ptr`, or empty if expired. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class COMPATIBLE_TYPE> explicit xref:bsl/shared_ptr-0a/2constructor-08d.adoc[shared_ptr](xref:bsl/weak_ptr-0d.adoc[weak_ptr<COMPATIBLE_TYPE>] const& ptr); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-08d.adoc[_» more..._]# Create a `shared_ptr` that manages the object at `ptr`. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class CONVERTIBLE_TYPE> explicit xref:bsl/shared_ptr-0a/2constructor-008.adoc[shared_ptr](CONVERTIBLE_TYPE* ptr); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-008.adoc[_» more..._]# Create an empty shared pointer. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- xref:bsl/shared_ptr-0a/2constructor-02.adoc[shared_ptr]( xref:bsl/nullptr_t-08.adoc[nullptr_t] nullPointerLiteral, xref:BloombergLP/bslma/Allocator.adoc[BloombergLP::bslma::Allocator]* basicAllocator); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-02.adoc[_» more..._]# Create a `shared_ptr` from the specified arguments. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- explicit xref:bsl/shared_ptr-0a/2constructor-01.adoc[shared_ptr]( std::auto_ptr_ref<ELEMENT_TYPE> autoRef, xref:BloombergLP/bslma/Allocator.adoc[BloombergLP::bslma::Allocator]* basicAllocator = 0); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-01.adoc[_» more..._]# Create a `shared_ptr` from the specified arguments. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- xref:bsl/shared_ptr-0a/2constructor-0c.adoc[shared_ptr]( xref:bsl/shared_ptr-0a/element_type.adoc[element_type]* ptr, xref:BloombergLP/bslma/SharedPtrRep.adoc[BloombergLP::bslma::SharedPtrRep]* rep); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-0c.adoc[_» more..._]# Create a `shared_ptr` by adopting ownership from a managed pointer. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class CONVERTIBLE_TYPE> xref:bsl/shared_ptr-0a/2constructor-09c.adoc[shared_ptr]( xref:BloombergLP/bslma/ManagedPtr-0fa.adoc[BloombergLP::bslma::ManagedPtr<CONVERTIBLE_TYPE>] managedPtr, xref:BloombergLP/bslma/Allocator.adoc[BloombergLP::bslma::Allocator]* basicAllocator = 0); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-09c.adoc[_» more..._]# Create a `shared_ptr` from the specified arguments. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class CONVERTIBLE_TYPE> explicit xref:bsl/shared_ptr-0a/2constructor-0e.adoc[shared_ptr]( std::auto_ptr<CONVERTIBLE_TYPE>& autoPtr, xref:BloombergLP/bslma/Allocator.adoc[BloombergLP::bslma::Allocator]* basicAllocator = 0); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-0e.adoc[_» more..._]# Create an aliased `shared_ptr` sharing ownership with `source`. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class ANY_TYPE> xref:bsl/shared_ptr-0a/2constructor-08c.adoc[shared_ptr]( xref:bsl/shared_ptr-0a.adoc[shared_ptr<ANY_TYPE>] const& source, ELEMENT_TYPE* object) noexcept; ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-08c.adoc[_» more..._]# Create a `shared_ptr` managing `ptr` using `basicAllocator`. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class CONVERTIBLE_TYPE> xref:bsl/shared_ptr-0a/2constructor-093.adoc[shared_ptr]( CONVERTIBLE_TYPE* ptr, xref:BloombergLP/bslma/Allocator.adoc[BloombergLP::bslma::Allocator]* basicAllocator); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-093.adoc[_» more..._]# Create a `shared_ptr` by adopting ownership from a unique pointer. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template< class COMPATIBLE_TYPE, class UNIQUE_DELETER> requires is_convertible< typename std::unique_ptr<COMPATIBLE_TYPE, UNIQUE_DELETER>::pointer, ELEMENT_TYPE *>::value xref:bsl/shared_ptr-0a/2constructor-0735.adoc[shared_ptr]( std::unique_ptr<COMPATIBLE_TYPE, UNIQUE_DELETER>&& adoptee, xref:BloombergLP/bslma/Allocator.adoc[BloombergLP::bslma::Allocator]* basicAllocator = 0); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-0735.adoc[_» more..._]# Create a `shared_ptr` managing `ptr` with a custom deleter. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template< class CONVERTIBLE_TYPE, class DELETER> xref:bsl/shared_ptr-0a/2constructor-0d5.adoc[shared_ptr]( CONVERTIBLE_TYPE* ptr, DELETER* deleter); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-0d5.adoc[_» more..._]# Create a `shared_ptr` from the specified arguments. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- xref:bsl/shared_ptr-0a/2constructor-000.adoc[shared_ptr]( ELEMENT_TYPE* ptr, xref:BloombergLP/bslma/SharedPtrRep.adoc[BloombergLP::bslma::SharedPtrRep]* rep, xref:BloombergLP/bslstl/SharedPtr_RepFromExistingSharedPtr.adoc[BloombergLP::bslstl::SharedPtr_RepFromExistingSharedPtr] tag); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-000.adoc[_» more..._]# Create a `shared_ptr` owning null with a deleter. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class DELETER> xref:bsl/shared_ptr-0a/2constructor-088.adoc[shared_ptr]( xref:bsl/nullptr_t-08.adoc[nullptr_t] nullPointerLiteral, DELETER deleter, xref:BloombergLP/bslma/Allocator.adoc[BloombergLP::bslma::Allocator]* basicAllocator = 0); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-088.adoc[_» more..._]# Create a `shared_ptr` managing `ptr` with a deleter and allocator. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template< class CONVERTIBLE_TYPE, class DELETER> xref:bsl/shared_ptr-0a/2constructor-038.adoc[shared_ptr]( CONVERTIBLE_TYPE* ptr, DELETER deleter, xref:BloombergLP/bslma/Allocator.adoc[BloombergLP::bslma::Allocator]* basicAllocator = 0); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-038.adoc[_» more..._]# Create a `shared_ptr` owning null with a deleter and allocator. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template< class DELETER, class ALLOCATOR> xref:bsl/shared_ptr-0a/2constructor-0a.adoc[shared_ptr]( xref:bsl/nullptr_t-08.adoc[nullptr_t] nullPointerLiteral, DELETER deleter, ALLOCATOR basicAllocator, ALLOCATOR::value_type* sfinae = 0); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-0a.adoc[_» more..._]# Create a `shared_ptr` managing `ptr` with a custom deleter. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template< class CONVERTIBLE_TYPE, class DELETER, class ALLOCATOR> xref:bsl/shared_ptr-0a/2constructor-0dd.adoc[shared_ptr]( CONVERTIBLE_TYPE* ptr, DELETER deleter, ALLOCATOR basicAllocator, ALLOCATOR::value_type* sfinae = 0); ---- [.small]#xref:bsl/shared_ptr-0a/2constructor-0dd.adoc[_» more..._]# == Parameters [cols="1,4"] |=== | Name| Description | *original* | source object to copy or move from | *other* | other pointer to compare or share ownership with | *nullPointerLiteral* | null‐pointer literal (unused; selects this overload) | *ptr* | pointer to the object to manage or refer to | *basicAllocator* | allocator used to supply memory | *rep* | shared‐pointer representation object | *managedPtr* | managed pointer whose ownership is transferred | *source* | source shared pointer that supplies ownership | *object* | object to refer to while sharing ownership with `source` | *adoptee* | unique pointer whose ownership is transferred | *deleter* | deleter invoked when the last shared reference is released | *tag* | tag selecting the existing‐representation constructor | *sfinae* | unused SFINAE discriminator |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#