[#bsl-shared_ptr-0a-reset-0e]
= xref:bsl.adoc[bsl]::xref:bsl/shared_ptr-0a.adoc[shared&lowbar;ptr]::reset
:relfileprefix: ../../
:mrdocs:

Modify this shared pointer to manage the modifiable object of the (template parameter) type `COMPATIBLE&lowbar;TYPE` at the specified `ptr` address, refer to `(ELEMENT&lowbar;TYPE &ast;)ptr`, and use the specified `deleter` to delete the shared object when all references have been released&period; If this shared pointer is already managing a (possibly shared) object, then unless an exception is thrown allocating memory to manage `ptr`, release the reference to the shared object, calling the associated deleter to destroy the shared object if this shared pointer is the last reference&period; If `DELETER` is an object type, then `deleter` is assumed to be a function&hyphen;like deleter that may be invoked to destroy the object referred to by a single argument of type `COMPATIBLE&lowbar;TYPE &ast;` (i&period;e&period;, `deleter(ptr)` will be called to destroy the shared object)&period; If `DELETER` is a pointer type that is not a function pointer, then `deleter` shall be a pointer to a factory object that exposes a member function that can be invoked as `deleteObject(ptr)` that will be called to destroy the object at the `ptr` address (i&period;e&period;, `deleter&hyphen;&gt;deleteObject(ptr)` will be called to delete the shared object)&period; (See the &quot;Deleters&quot; section in the component&hyphen;level documentation&period;) If `DELETER` is also a pointer to `bslma&colon;&colon;Allocator` or to a class derived from `bslma&colon;&colon;Allocator`, then that allocator will also be used to allocate and destroy the internal representation of this shared pointer when all references have been released&semi; otherwise, the currently installed default allocator is used to allocate and destroy the internal representation of this shared pointer when all references have been released&period; If an exception is thrown allocating the internal representation, then `deleter(ptr)` is called (or `deleter&hyphen;&gt;deleteObject(ptr)` for factory&hyphen;type deleters) and this shared pointer retains ownership of its original object&period; If `COMPATIBLE&lowbar;TYPE&ast;` is not implicitly convertible to `ELEMENT&lowbar;TYPE&ast;`, then a compiler diagnostic will be emitted indicating the error&period; Note that, for factory deleters, `deleter` must remain valid until all references to `ptr` have been released&period; If `ptr` is 0, then an internal representation will still be allocated, and this shared pointer will share ownership of a copy of `deleter`&period; Further note that this function is logically equivalent to&colon; &grave; &ast;this &equals; shared&lowbar;ptr&lt;ELEMENT&lowbar;TYPE&gt;(ptr, deleter)&semi; &grave;

== Synopsis

Declared in `&lt;bslstl&lowbar;sharedptr&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class COMPATIBLE&lowbar;TYPE,
    class DELETER&gt;
void
reset(
    COMPATIBLE&lowbar;TYPE* ptr,
    DELETER deleter)
requires is&lowbar;convertible&lt;COMPATIBLE&lowbar;TYPE &ast;, ELEMENT&lowbar;TYPE &ast;&gt;&colon;&colon;value;
----


[.small]#Created with https://www.mrdocs.com[MrDocs]#
