Memory management library - cppreference.com

Smart pointers (since C++11)

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

Defined in header

<memory>

Pointer categories

unique_ptr

(C++11)

smart pointer with unique object ownership semantics
(class template)

[edit]

shared_ptr

(C++11)

smart pointer with shared object ownership semantics
(class template)

[edit]

weak_ptr

(C++11)

weak reference to an object managed by

std::shared_ptr

(class template)

[edit]

auto_ptr

(deprecated in C++11)(removed in C++17)

smart pointer with strict object ownership semantics
(class template)

[edit]

Helper classes

owner_less

(C++11)

provides mixed-type owner-based ordering of shared and weak pointers
(class template)

[edit]

owner_hash

(C++26)

provides owner-based hashing for shared and weak pointers
(class)

[edit]

owner_equal

(C++26)

provides mixed-type owner-based equal comparisons of shared and weak pointers
(class)

[edit]

enable_shared_from_this

(C++11)

allows an object to create a shared_ptr referring to itself
(class template)

[edit]

bad_weak_ptr

(C++11)

exception thrown when accessing a weak_ptr which refers to already destroyed object
(class)

[edit]

default_delete

(C++11)

default deleter for

unique_ptr

(class template)

[edit]

Smart pointer adaptors (since C++23)

out_ptr_t

(C++23)

interoperates with foreign pointer setters and resets a smart pointer on destruction
(class template)

[edit]

out_ptr

(C++23)

creates an out_ptr_t with an associated smart pointer and resetting arguments
(function template)

[edit]

inout_ptr_t

(C++23)

interoperates with foreign pointer setters, obtains the initial pointer value from a smart pointer, and resets it on destruction
(class template)

[edit]

inout_ptr

(C++23)

creates an inout_ptr_t with an associated smart pointer and resetting arguments
(function template)

[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>

allocator

the default allocator
(class template)

[edit]

allocator_traits

(C++11)

provides information about allocator types
(class template)

[edit]

allocation_result

(C++23)

records the address and the actual size of storage allocated by allocate_at_least
(class template)

[edit]

allocator_argallocator_arg_t

(C++11)

a tag used to select allocator-aware constructors
(tag)

[edit]

uses_allocator

(C++11)

checks if the specified type supports uses-allocator construction
(class template)

[edit]

uses_allocator_construction_args

(C++20)

prepares the argument list matching the flavor of uses-allocator construction required by the given type
(function template)

[edit]

make_obj_using_allocator

(C++20)

creates an object of the given type by means of uses-allocator construction
(function template)

[edit]

uninitialized_construct_using_allocator

(C++20)

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>

scoped_allocator_adaptor

(C++11)

implements multi-level allocator for multi-level containers
(class template)

[edit]

Defined in header

<memory_resource>

Defined in namespace std::pmr

polymorphic_allocator

(C++17)

an allocator that supports run-time polymorphism based on the

std::pmr::memory_resource

it is constructed with
(class template)

[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

memory_resource

(C++17)

an abstract interface for classes that encapsulate memory resources
(class)

[edit]

new_delete_resource

(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)

[edit]

null_memory_resource

(C++17)

returns a static

std::pmr::memory_resource

that performs no allocation
(function)

[edit]

get_default_resource

(C++17)

gets the default

std::pmr::memory_resource

(function)

[edit]

set_default_resource

(C++17)

sets the default

std::pmr::memory_resource

(function)

[edit]

pool_options

(C++17)

a set of constructor options for pool resources
(class)

[edit]

synchronized_pool_resource

(C++17)

a thread-safe

std::pmr::memory_resource

for managing allocations in pools of different block sizes
(class)

[edit]

unsynchronized_pool_resource

(C++17)

a thread-unsafe

std::pmr::memory_resource

for managing allocations in pools of different block sizes
(class)

[edit]

monotonic_buffer_resource

(C++17)

a special-purpose

std::pmr::memory_resource

that releases the allocated memory only when the resource is destroyed
(class)

[edit]

Specialized <memory> algorithms

Explicit lifetime management (since C++23)

Types for composite class design (since C++26)

(C++26)

a wrapper containing dynamically-allocated object with value-like semantics
(class template)

[edit]

(C++26)

a polymorphic wrapper containing dynamically-allocated object with value-like semantics
(class template)

[edit]

Miscellaneous

Defined in header

<memory>

pointer_traits

(C++11)

provides information about pointer-like types
(class template)

[edit]

to_address

(C++20)

obtains a raw pointer from a pointer-like type
(function template)

[edit]

addressof

(C++11)

obtains actual address of an object, even if the & operator is overloaded
(function template)

[edit]

align

(C++11)

aligns a pointer in a buffer
(function)

[edit]

assume_aligned

(C++20)

informs the compiler that a pointer is aligned
(function template)

[edit]

is_sufficiently_aligned

(C++26)

checks whether the pointer points to an object whose alignment has at least the given value
(function template)

[edit]

Low level memory management

Includes e.g.

operator new

,

operator delete

,

std::set_new_handler

.

C-style memory management

Includes e.g.

std::malloc

,

std::free

.

Uninitialized storage (until C++20)

Several utilities are provided to create and access raw storage.

Garbage collector support (until C++23)

Defined in header

<memory>

declare_reachable

(C++11)(removed in C++23)

declares that an object can not be recycled
(function)

[edit]

undeclare_reachable

(C++11)(removed in C++23)

declares that an object can be recycled
(function template)

[edit]

declare_no_pointers

(C++11)(removed in C++23)

declares that a memory area does not contain traceable pointers
(function)

[edit]

undeclare_no_pointers

(C++11)(removed in C++23)

cancels the effect of

std::declare_no_pointers

(function)

[edit]

pointer_safety

(C++11)(removed in C++23)

lists pointer safety models
(enum)

[edit]

get_pointer_safety

(C++11)(removed in C++23)

returns the current pointer safety model
(function)

[edit]