The header <memory> defines several types and function templates that
describe properties of pointers and pointer-like types, manage memory
for containers and other template types, destroy objects, and
construct objects in
buffers ([pointer.traits]–[specialized.addressof] and [specialized.algorithms]).
The header also defines the templates
unique_ptr, shared_ptr, weak_ptr,
out_ptr_t, inout_ptr_t, and various function
templates that operate on objects of these types ([smartptr]).