◐ Shell
clean mode source ↗

Управление динамической памятью — cppreference.com

Умные указатели

Умные указатели обеспечивают автоматическое безопасное управление временем жизни объектов.

Определены в заголовочном файле <memory>

Категории указателей
умный указатель с уникальной семантикой владения объектом
(шаблон класса) [править]
умный указатель с семантикой владения разделяемым объектом
(шаблон класса) [править]

(C++11)

слабая ссылка на объект, управляемый std::shared_ptr
(шаблон класса) [править]

(устарело в C++11)(удалено в C++17)

умный указатель со строгой семантикой владения объектом
(шаблон класса) [править]
Вспомогательные классы
обеспечивает смешанный тип разделяемых и слабых указателей на основе владельцев
(шаблон класса) [править]
позволяет объекту создавать shared_ptr, ссылаясь на себя
(шаблон класса) [править]
исключение, возникающее при доступе к weak_ptr, который ссылается на уже уничтоженный объект
(класс) [править]
средство удаления по умолчанию для std::unique_ptr
(шаблон класса) [править]
Адаптеры для умных указателей

(C++23)

взаимодействует с установщиками внешних указателей и сбрасывает умный указатель при уничтожении
(шаблон класса) [править]

(C++23)

создаёт out_ptr_t с ассоциированным умным указателем и сбрасывает аргументы
(шаблон функции) [править]
взаимодействует с внешними установщиками указателей, получает начальное значение указателя из умного указателя и сбрасывает его при уничтожении
(шаблон класса) [править]

(C++23)

создаёт inout_ptr_t с ассоциированным умным указателем и сбрасывает аргументы
(шаблон функции) [править]

Аллокаторы

Аллокаторы, это шаблоны классов, инкапсулирующие стратегию выделения памяти. Это позволяет универсальным контейнерам отделить управление памятью от самих данных.

Определены в заголовочном файле <memory>

аллокатор по умолчанию
(шаблон класса) [править]
предоставляет информацию о типах аллокаторов
(шаблон класса) [править]
записывает адрес и фактический размер памяти, выделенной allocate_at_least
(шаблон класса) [править]
объект типа std::allocator_arg_t, используемый для выбора конструкторов с учётом аллокатора
(константа) [править]
проверяет, поддерживает ли указанный тип конструирование с uses_allocator
(шаблон класса) [править]
подготавливает список аргументов, соответствующий варианту создания с использованием аллокатора, требуемый данным типом
(шаблон функции) [править]
создаёт объект данного типа с помощью конструирования с использованием аллокатора
(шаблон функции) [править]
создаёт объект данного типа в указанной области памяти с помощью конструирования с использованием аллокатора
(шаблон функции) [править]

Определены в заголовочном файле <scoped_allocator>

реализует многоуровневый аллокатор для многоуровневых контейнеров
(шаблон класса) [править]

Определены в заголовочном файле <memory_resource>

Определены в пространстве имён std::pmr

аллокатор, который поддерживает полиморфизм времени выполнения на основе std::pmr::memory_resource, с использованием которого он построен
(шаблон класса) [править]

Ресурсы памяти (начиная с C++17)

Ресурсы памяти реализуют стратегии выделения памяти, которые может использовать std::pmr::polymorphic_allocator

Определены в заголовочном файле <memory_resource>

Определены в пространстве имён std::pmr

абстрактный интерфейс для классов, которые инкапсулируют ресурсы памяти
(класс) [править]
возвращает статический общепрограммный std::pmr::memory_resource, который использует глобальные operator new и operator delete для выделения и освобождения памяти
(функция) [править]
возвращает статический std::pmr::memory_resource, который не выполняет выделение памяти
(функция) [править]
получает значение по умолчанию std::pmr::memory_resource
(функция) [править]
устанавливает std::pmr::memory_resource по умолчанию
(функция) [править]
набор параметров конструктора для пула ресурсов
(класс) [править]
потокобезопасный std::pmr::memory_resource для управления выделениями в пулах блоков с разными размерами
(класс) [править]
небезопасный для потока std::pmr::memory_resource для управления выделениями памяти в пулах с разными размерами блоков
(класс) [править]
специальный std::pmr::memory_resource, который освобождает выделенную память только при уничтожении ресурса
(класс) [править]

Неинициализированное хранилище

Для создания и доступа к необработанному хранилищу предоставляется несколько утилит.

Определены в заголовочном файле <memory>

(не рекомендуется в C++17)(удалено в C++20)

итератор, который позволяет стандартным алгоритмам сохранять результаты в неинициализированной памяти
(шаблон класса) [править]

(не рекомендуется в C++17)(удалено в C++20)

получает неинициализированную память
(шаблон функции) [править]

(не рекомендуется в C++17)(удалено в C++20)

освобождает неинициализированное хранилище
(шаблон функции) [править]

Алгоритмы неинициализированной памяти

Определены в заголовочном файле <memory>

копирует диапазон объектов в неинициализированную область памяти
(шаблон функции) [править]
копирует ряд объектов в неинициализированную область памяти
(шаблон функции) [править]
копирует объект в неинициализированную область памяти, определяемую диапазоном
(шаблон функции) [править]
копирует объект в неинициализированную область памяти, определяемую началом и количеством
(шаблон функции) [править]
перемещает диапазон объектов в неинициализированную область памяти
(шаблон функции) [править]
перемещает ряд объектов в неинициализированную область памяти
(шаблон функции) [править]
создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой диапазоном
(шаблон функции) [править]
создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой началом и количеством
(шаблон функции) [править]
создаёт объекты инициализацией значением в неинициализированной области памяти, определяемой диапазоном
(шаблон функции) [править]
создаёт объекты инициализацией значением в неинициализированной области памяти, определяемой началом и количеством
(шаблон функции) [править]
уничтожает объект по заданному адресу
(шаблон функции) [править]

(C++17)

уничтожает диапазон объектов
(шаблон функции) [править]

(C++17)

уничтожает несколько объектов в диапазоне
(шаблон функции) [править]
создаёт объект по заданному адресу
(шаблон функции) [править]

Ограниченные алгоритмы неинициализированной памяти (начиная с C++20)

C++20 предоставляет ограниченные алгоритмы неинициализированной памяти, которые принимают аргументы диапазона или пары итератор-ограничитель.

Определены в заголовочном файле <memory>

Определены в пространстве имён std::ranges

Определяют некоторые операцию над итераторами, ограничителями и диапазонами, которые не бросают исключение
(только для пояснения concept*)
копирует диапазон объектов в неинициализированную область памяти
(ниблоид) [править]
копирует ряд объектов в неинициализированную область памяти
(ниблоид) [править]
копирует объект в неинициализированную область памяти, определяемую диапазоном
(ниблоид) [править]
копирует объект в неинициализированную область памяти, определяемую началом и количеством
(ниблоид) [править]
перемещает диапазон объектов в неинициализированную область памяти
(ниблоид) [править]
перемещает ряд объектов в неинициализированную область памяти
(ниблоид) [править]
создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой диапазоном
(ниблоид) [править]
создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой началом и количеством
(ниблоид) [править]
создаёт объекты инициализацией значением в неинициализированной области памяти, определяемой диапазоном
(ниблоид) [править]
создаёт объекты инициализированные значением в неинициализированной области памяти, определяемой началом и количеством
(ниблоид) [править]
уничтожает объект по заданному адресу
(ниблоид) [править]
уничтожает диапазон объектов
(ниблоид) [править]
уничтожает несколько объектов в диапазоне
(ниблоид) [править]
создаёт объект по заданному адресу
(ниблоид) [править]

Поддержка сборщика мусора (начиная с C++23)

Определены в заголовочном файле <memory>

(C++11)(удалено в C++23)

объявляет, что объект не может быть использован повторно
(функция) [править]

(C++11)(удалено в C++23)

объявляет, что объект может быть использован повторно
(шаблон функции) [править]

(C++11)(удалено в C++23)

объявляет, что область памяти не содержит отслеживаемых указателей
(функция) [править]

(C++11)(удалено в C++23)

отменяет действие std::declare_no_pointers
(функция) [править]

(C++11)(удалено в C++23)

перечисляет модели безопасности указателя
(перечисление) [править]

(C++11)(удалено в C++23)

возвращает текущую модель безопасности указателя
(функция) [править]

Явное управление временем жизни (начиная с C++23)

Разное

Определены в заголовочном файле <memory>

предоставляет информацию о типах, подобных указателям
(шаблон класса) [править]
получает сырой указатель из типа, подобного указателю
(шаблон функции) [править]

(C++11)

получает фактический адрес объекта, даже если оператор & перегружен
(шаблон функции) [править]

(C++11)

выравнивает указатель в буфере
(функция) [править]
сообщает компилятору, что указатель выровнен
(шаблон функции) [править]

Низкоуровневое управление памятью

Включает например operator new, operator delete, std::set_new_handler

Определены в заголовочном файле <new>

Управление памятью в стиле C

Включает например std::malloc, std::free

Определены в заголовочном файле <cstdlib>