Namespaces
Variants
Views
Actions

Dynamic memory management

From cppreference.com
< cpp
 
 
Utilities library
Language support
Type support (basic types, RTTI)
Library feature-test macros (C++20)
Dynamic memory management
Program utilities
Coroutine support (C++20)
Variadic functions
Debugging support
(C++26)
Three-way comparison
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
General utilities
Date and time
Function objects
Formatting library (C++20)
(C++11)
Relational operators (deprecated in C++20)
Integer comparison functions
(C++20)(C++20)(C++20)   
(C++20)
Swap and type operations
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Common vocabulary types
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Elementary string conversions
(C++17)
(C++17)

 
Dynamic memory management
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Allocators
Garbage collection support
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)



 

Contents

[edit] Smart pointers

Smart pointers enable automatic, exception-safe, object lifetime management.

Defined in header <memory>
Pointer categories
smart pointer with unique object ownership semantics
(class template) [edit]
smart pointer with shared object ownership semantics
(class template) [edit]
(C++11)
weak reference to an object managed by std::shared_ptr
(class template) [edit]
(deprecated in C++11)(removed in C++17)
smart pointer with strict object ownership semantics
(class template) [edit]
Helper classes
provides mixed-type owner-based ordering of shared and weak pointers
(class template) [edit]
provides owner-based hashing for shared and weak pointers
(class) [edit]
provides mixed-type owner-based equal comparisons of shared and weak pointers
(class) [edit]
allows an object to create a shared_ptr referring to itself
(class template) [edit]
exception thrown when accessing a weak_ptr which refers to already destroyed object
(class) [edit]
default deleter for unique_ptr
(class template) [edit]
Smart pointer adaptors
(C++23)
interoperates with foreign pointer setters and resets a smart pointer on destruction
(class template) [edit]
(C++23)
creates an out_ptr_t with an associated smart pointer and resetting arguments
(function template) [edit]
interoperates with foreign pointer setters, obtains the initial pointer value from a smart pointer, and resets it on destruction
(class template) [edit]
(C++23)
creates an inout_ptr_t with an associated smart pointer and resetting arguments
(function template) [edit]

[edit] 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) [edit]
provides information about allocator types
(class template) [edit]
records the address and the actual size of storage allocated by allocate_at_least
(class template) [edit]
an object of type std::allocator_arg_t used to select allocator-aware constructors
(constant) [edit]
checks if the specified type supports uses-allocator construction
(class template) [edit]
prepares the argument list matching the flavor of uses-allocator construction required by the given type
(function template) [edit]
creates an object of the given type by means of uses-allocator construction
(function template) [edit]
creates an object of the given type at specified memory location by means of uses-allocator construction
(function template) [edit]
Defined in header <scoped_allocator>
implements multi-level allocator for multi-level containers
(class template) [edit]
Defined in header <memory_resource>
Defined in namespace std::pmr
an allocator that supports run-time polymorphism based on the std::pmr::memory_resource it is constructed with
(class template) [edit]

[edit] Memory resources (since C++17)

Memory resources implement memory allocation strategies that can be used by std::pmr::polymorphic_allocator

Defined in header <memory_resource>
Defined in namespace std::pmr
an abstract interface for classes that encapsulate memory resources
(class) [edit]
returns a static program-wide std::pmr::memory_resource that uses the global operator new and operator delete to allocate and deallocate memory
(function) [edit]
returns a static std::pmr::memory_resource that performs no allocation
(function) [edit]
gets the default std::pmr::memory_resource
(function) [edit]
sets the default std::pmr::memory_resource
(function) [edit]
a set of constructor options for pool resources
(class) [edit]
a thread-safe std::pmr::memory_resource for managing allocations in pools of different block sizes
(class) [edit]
a thread-unsafe std::pmr::memory_resource for managing allocations in pools of different block sizes
(class) [edit]
a special-purpose std::pmr::memory_resource that releases the allocated memory only when the resource is destroyed
(class) [edit]

[edit] Uninitialized storage

Several utilities are provided to create and access raw storage.

Defined in header <memory>
(deprecated in C++17)(removed in C++20)
an iterator that allows standard algorithms to store results in uninitialized memory
(class template) [edit]
(deprecated in C++17)(removed in C++20)
obtains uninitialized storage
(function template) [edit]
(deprecated in C++17)(removed in C++20)
frees uninitialized storage
(function template) [edit]

[edit] Uninitialized memory algorithms

Defined in header <memory>
copies a range of objects to an uninitialized area of memory
(function template) [edit]
copies a number of objects to an uninitialized area of memory
(function template) [edit]
copies an object to an uninitialized area of memory, defined by a range
(function template) [edit]
copies an object to an uninitialized area of memory, defined by a start and a count
(function template) [edit]
moves a range of objects to an uninitialized area of memory
(function template) [edit]
moves a number of objects to an uninitialized area of memory
(function template) [edit]
constructs objects by default-initialization in an uninitialized area of memory, defined by a range
(function template) [edit]
constructs objects by default-initialization in an uninitialized area of memory, defined by a start and a count
(function template) [edit]
constructs objects by value-initialization in an uninitialized area of memory, defined by a range
(function template) [edit]
constructs objects by value-initialization in an uninitialized area of memory, defined by a start and a count
(function template) [edit]
destroys an object at a given address
(function template) [edit]
(C++17)
destroys a range of objects
(function template) [edit]
(C++17)
destroys a number of objects in a range
(function template) [edit]
creates an object at a given address
(function template) [edit]

[edit] Constrained uninitialized memory algorithms (since 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
specifies some operations on iterators, sentinels and ranges are non-throwing
(exposition-only concept*)
copies a range of objects to an uninitialized area of memory
(niebloid)[edit]
copies a number of objects to an uninitialized area of memory
(niebloid)[edit]
copies an object to an uninitialized area of memory, defined by a range
(niebloid)[edit]
copies an object to an uninitialized area of memory, defined by a start and a count
(niebloid)[edit]
moves a range of objects to an uninitialized area of memory
(niebloid)[edit]
moves a number of objects to an uninitialized area of memory
(niebloid)[edit]
constructs objects by default-initialization in an uninitialized area of memory, defined by a range
(niebloid)[edit]
constructs objects by default-initialization in an uninitialized area of memory, defined by a start and count
(niebloid)[edit]
constructs objects by value-initialization in an uninitialized area of memory, defined by a range
(niebloid)[edit]
constructs objects by value-initialization in an uninitialized area of memory, defined by a start and a count
(niebloid)[edit]
destroys an object at a given address
(niebloid)[edit]
destroys a range of objects
(niebloid)[edit]
destroys a number of objects in a range
(niebloid)[edit]
creates an object at a given address
(niebloid)[edit]

[edit] Garbage collector support (until C++23)

Defined in header <memory>
(C++11)(removed in C++23)
declares that an object can not be recycled
(function) [edit]
(C++11)(removed in C++23)
declares that an object can be recycled
(function template) [edit]
(C++11)(removed in C++23)
declares that a memory area does not contain traceable pointers
(function) [edit]
(C++11)(removed in C++23)
cancels the effect of std::declare_no_pointers
(function) [edit]
(C++11)(removed in C++23)
lists pointer safety models
(enum) [edit]
(C++11)(removed in C++23)
returns the current pointer safety model
(function) [edit]

[edit] Explicit lifetime management (since C++23)

Defined in header <memory>
implicitly creates objects in given storage with the object representation reused
(function template) [edit]

[edit] Miscellaneous

Defined in header <memory>
provides information about pointer-like types
(class template) [edit]
obtains a raw pointer from a pointer-like type
(function template) [edit]
(C++11)
obtains actual address of an object, even if the & operator is overloaded
(function template) [edit]
(C++11)
aligns a pointer in a buffer
(function) [edit]
informs the compiler that a pointer is aligned
(function template) [edit]

[edit] Low level memory management

Includes e.g. operator new, operator delete, std::set_new_handler

Defined in header <new>

[edit] C-style memory management

Includes e.g. std::malloc, std::free

Defined in header <cstdlib>