Dynamic memory management
From cppreference.com
                    
                                        
                    < cpp
                    
                                                            
                    Smart pointers
Smart pointers enable automatic, exception-safe, object lifetime management.
| Defined in header  <memory> | |
| Pointer categories | |
| (C++11) | smart pointer with unique object ownership semantics (class template) | 
| (C++11) | smart pointer with shared object ownership semantics (class template) | 
| (C++11) | weak reference to an object managed by std::shared_ptr (class template) | 
| (removed in C++17) | smart pointer with strict object ownership semantics (class template) | 
| Helper classes | |
| (C++11) | provides mixed-type owner-based ordering of shared and weak pointers (class template) | 
| (C++11) | allows an object to create a shared_ptrreferring to itself(class template) | 
| (C++11) | exception thrown when accessing a weak_ptrwhich refers to already destroyed object(class) | 
| (C++11) | default deleter for unique_ptr(class template) | 
Allocators
Allocators are class templates encapsulating memory allocation strategy. This allows generic containers to decouple memory management from the data itself.
| Defined in header  <memory> | |
| the default allocator (class template) | |
| (C++11) | provides information about allocator types (class template) | 
| (C++11) | tag type used to select allocator-aware constructor overloads (class) | 
| (C++11) | an object of type std::allocator_arg_t used to select allocator-aware constructors (constant) | 
| (C++11) | checks if the specified type supports uses-allocator construction (class template) | 
| prepares the argument list matching the flavor of uses-allocator construction required by the given type (function template) | |
| (C++20) | creates an object of the given type by means of uses-allocator construction (function template) | 
| creates an object of the given type at specified memory location by means of uses-allocator construction (function template) | |
| Defined in header  <scoped_allocator> | |
| (C++11) | implements multi-level allocator for multi-level containers (class template) | 
| Defined in header  <memory_resource> | |
| Defined in  namespace  pmr | |
| (C++17) | an allocator that supports run-time polymorphism based on the std::memory_resource it is constructed with (class template) | 
Memory resources
Memory resources implement memory allocation strategies that can be used by std::pmr::polymorphic_allocator
| Defined in header  <memory_resource> | |
| Defined in  namespace  pmr | |
| (C++17) | an abstract interface for classes that encapsulate memory resources (class) | 
| (C++17) | returns a static program-wide std::pmr::memory_resource that uses the global operator new and operator delete to allocate and deallocate memory (function) | 
| (C++17) | returns a static std::pmr::memory_resource that performs no allocation (function) | 
| (C++17) | gets the default std::pmr::memory_resource (function) | 
| (C++17) | sets the default std::pmr::memory_resource (function) | 
| (C++17) | a set of constructor options for pool resources (class) | 
| (C++17) | a thread-safe std::pmr::memory_resource for managing allocations in pools of different block sizes (class) | 
| (C++17) | a thread-unsafe std::pmr::memory_resource for managing allocations in pools of different block sizes (class) | 
| (C++17) | a special-purpose std::pmr::memory_resource that releases the allocated memory only when the resource is destroyed (class) | 
Uninitialized storage
Several utilities are provided to create and access raw storage
| Defined in header  <memory> | |
| copies a range of objects to an uninitialized area of memory (function template) | |
| (C++11) | copies a number of objects to an uninitialized area of memory (function template) | 
| copies an object to an uninitialized area of memory, defined by a range (function template) | |
| copies an object to an uninitialized area of memory, defined by a start and a count (function template) | |
| (C++17) | moves a range of objects to an uninitialized area of memory (function template) | 
| (C++17) | moves a number of objects to an uninitialized area of memory (function template) | 
| constructs objects by default-initialization in an uninitialized area of memory, defined by a range (function template) | |
| constructs objects by default-initialization in an uninitialized area of memory, defined by a start and a count (function template) | |
| constructs objects by value-initialization in an uninitialized area of memory, defined by a range (function template) | |
| constructs objects by value-initialization in an uninitialized area of memory, defined by a start and a count (function template) | |
| (C++17) | destroys an object at a given address (function template) | 
| (C++17) | destroys a range of objects (function template) | 
| (C++17) | destroys a number of objects in a range (function template) | 
| (deprecated in C++17)(removed in C++20) | an iterator that allows standard algorithms to store results in uninitialized memory (class template) | 
| (deprecated in C++17)(removed in C++20) | obtains uninitialized storage (function template) | 
| (deprecated in C++17)(removed in C++20) | frees uninitialized storage (function template) | 
Constrained uninitialized memory algorithms (C++20)
C++20 provides constrained uninitialized memory algorithms that accept range arguments or iterator-sentinel pairs.
| Defined in header  <memory> | |
| Defined in  namespace  std::ranges | |
| (C++20) | copies a range of objects to an uninitialized area of memory (niebloid) | 
| (C++20) | copies a number of objects to an uninitialized area of memory (niebloid) | 
| (C++20) | copies an object to an uninitialized area of memory, defined by a range (niebloid) | 
| (C++20) | copies an object to an uninitialized area of memory, defined by a start and a count (niebloid) | 
| (C++20) | moves a range of objects to an uninitialized area of memory (niebloid) | 
| (C++20) | moves a number of objects to an uninitialized area of memory (niebloid) | 
| constructs objects by default-initialization in an uninitialized area of memory, defined by a range (niebloid) | |
| constructs objects by default-initialization in an uninitialized area of memory, defined by a start and count (niebloid) | |
| constructs objects by value-initialization in an uninitialized area of memory, defined by a range (niebloid) | |
| constructs objects by value-initialization in an uninitialized area of memory, defined by a start and a count (niebloid) | |
| (C++20) | destroys an object at a given address (niebloid) | 
| (C++20) | destroys a range of objects (niebloid) | 
| (C++20) | destroys a number of objects in a range (niebloid) | 
Garbage collector support
| Defined in header  <memory> | |
| (C++11) | declares that an object can not be recycled (function) | 
| (C++11) | declares that an object can be recycled (function template) | 
| (C++11) | declares that a memory area does not contain traceable pointers (function) | 
| (C++11) | cancels the effect of std::declare_no_pointers (function) | 
| (C++11) | lists pointer safety models (enum) | 
| (C++11) | returns the current pointer safety model (function) | 
Miscellaneous
| Defined in header  <memory> | |
| (C++11) | provides information about pointer-like types (class template) | 
| (C++20) | obtains a raw pointer from a pointer-like type (function template) | 
| (C++11) | obtains actual address of an object, even if the & operator is overloaded (function template) | 
| (C++11) | aligns a pointer in a buffer (function) | 
| (C++20) | informs the compiler that a pointer is aligned (function template) | 
C-style memory management
Includes e.g. std::malloc, std::free
Low level memory management
Includes e.g. operator new ,  operator delete , std::set_new_handler