Управление динамической памятью
Умные указатели
Умные указатели обеспечивают автоматическое, безопасное от исключений управление жизненным циклом объектов.
Определено в заголовке <memory> |
|
|---|---|
Категории указателей |
|
|
(C++11) | умный указатель с уникальной семантикой владения объектом (шаблон класса) |
|
(C++11) | умный указатель с семантикой совместного владения объектом (шаблон класса) |
|
(C++11) | слабая ссылка на объект, управляемый std::shared_ptr (шаблон класса) |
|
(устаревший в C++11)(удален в C++17) | умный указатель со строгими семантиками владения объектом (шаблон класса) |
Вспомогательные классы |
|
|
(C++11) | обеспечивает упорядочивание по владению указателей shared_ptr и weak_ptr различных типов (шаблон класса) |
|
(C++26) | обеспечивает хеширование по владению для shared_ptr и weak_ptr (класс) |
|
(C++26) | обеспечивает сравнение по владению указателей shared_ptr и weak_ptr различных типов (класс) |
|
(C++11) | позволяет объекту создать shared_ptr , ссылающийся на себя (шаблон класса) |
|
(C++11) | исключение, выбрасываемое при доступе к weak_ptr, который ссылается на уже удалённый объект (класс) |
|
(C++11) | деструктор по умолчанию для unique_ptr (шаблон класса) |
Адаптеры умных указателей |
|
|
(C++23) | взаимодействует с внешними установщиками указателей и сбрасывает умный указатель при уничтожении (шаблон класса) |
|
(C++23) | создаёт out_ptr_t с ассоциированным умным указателем и аргументами сброса (шаблон функции) |
|
(C++23) | взаимодействует с внешними установщиками указателей, получает начальное значение указателя от умного указателя и сбрасывает его при уничтожении (шаблон класса) |
|
(C++23) | создаёт inout_ptr_t с ассоциированным умным указателем и аргументами сброса (шаблон функции) |
Алокатороы
Алокатороы — это шаблоны классов, инкапсулирующие стратегию выделения памяти. Это позволяет общим контейнерам отделить управление памятью от самих данных.
Определено в заголовке <memory> |
|
|---|---|
| алокактор по умолчанию (шаблон класса) |
|
|
(C++11) | предоставляет информацию о типах алокатороы (шаблон класса) |
|
(C++23) | записывает адрес и фактический размер выделенного allocate_at_least хранилища (шаблон класса) |
|
(C++11) | объект типа std::allocator_arg_t , используемый для выбора конструкторов, учитывающих алокатороы (константа) |
|
(C++11) | проверяет, поддерживает ли указанный тип конструкцию с использованием алокатороы (шаблон класса) |
|
(C++20) | подготавливает список аргументов, соответствующий форме конструкции с использованием алокатороы, необходимой для данного типа (шаблон функции) |
|
(C++20) | создаёт объект заданного типа с помощью конструкции с использованием алокатороы (шаблон функции) |
|
(C++20) | создаёт объект заданного типа в заданном месте в памяти с помощью конструкции с использованием алокатороы (шаблон функции) |
Определено в заголовке <scoped_allocator> |
|
|
(C++11) | реализует алокактор нескольких уровней для контейнеров нескольких уровней (шаблон класса) |
Определено в заголовке <memory_resource> |
|
Определено в пространстве имён std::pmr |
|
|
(C++17) | алокактор, поддерживающий полиморфизм во время выполнения, основанный на std::pmr::memory_resource , с которым он был создан (шаблон класса) |
Ресурсы памяти (с C++17)
Ресурсы памяти реализуют стратегии выделения памяти, которые могут использоваться std::pmr::polymorphic_allocator
Определено в заголовке <memory_resource> |
|
|---|---|
Определено в пространстве имён std::pmr |
|
|
(C++17) | абстрактный интерфейс для классов, которые инкапсулируют ресурсы памяти (класс) |
|
(C++17) | возвращает статический общепрограммный std::pmr::memory_resource , который использует глобальные operator new и operator delete для выделения и освобождения памяти (функция) |
|
(C++17) | возвращает статический std::pmr::memory_resource , который не выполняет выделение (функция) |
|
(C++17) | получает значение по умолчанию std::pmr::memory_resource (функция) |
|
(C++17) | устанавливает значение по умолчанию std::pmr::memory_resource (функция) |
|
(C++17) | набор опций конструктора для ресурсов пула (класс) |
|
(C++17) | потокобезопасный std::pmr::memory_resource для управления выделениями в пулах различных размеров блоков (класс) |
|
(C++17) | потоконебезопасный std::pmr::memory_resource для управления выделениями в пулах различных размеров блоков (класс) |
|
(C++17) | специальный std::pmr::memory_resource , который освобождает выделенную память только при уничтожении ресурса (класс) |
Неинициализированное хранилище
Предоставляется несколько утилит для создания и доступа к неинициализированному хранилищу.
Определено в заголовке <memory> |
|
|---|---|
|
(устарело в C++17)(удалено в C++20) | итератор, который позволяет стандартным алгоритмам сохранять результаты в неинициализированной памяти (шаблон класса) |
|
(устарело в C++17)(удалено в C++20) | получает неинициализированное хранилище (шаблон функции) |
|
(устарело в C++17)(удалено в C++20) | освобождает неинициализированное хранилище (шаблон функции) |
Алгоритмы для неинициализированной памяти
Определено в заголовке <memory> |
|
|---|---|
| копирует диапазон объектов в неинициализированную область памяти (шаблон функции) |
|
|
(C++11) | копирует определенное число объектов в неинициализированную область памяти (шаблон функции) |
| копирует объект в неинициализированную область памяти, заданную диапазоном (шаблон функции) |
|
| копирует объект в неинициализированную область памяти, заданную началом и количеством (шаблон функции) |
|
|
(C++17) | перемещает диапазон объектов в неинициализированную область памяти (шаблон функции) |
|
(C++17) | перемещает определенное число объектов в неинициализированную область памяти (шаблон функции) |
|
(C++17) | создаёт объекты с помощью инициализации по умолчанию в неинициализированной области памяти, заданной диапазоном (шаблон функции) |
|
(C++17) | создаёт объекты с помощью инициализации по умолчанию в неинициализированной области памяти, заданной началом и количеством (шаблон функции) |
|
(C++17) | создаёт объекты с помощью инициализации значением в неинициализированной области памяти, заданной диапазоном (шаблон функции) |
|
(C++17) | создаёт объекты с помощью инициализации значением в неинициализированной области памяти, заданной началом и количеством (шаблон функции) |
|
(C++17) | уничтожает объект по заданному адресу (шаблон функции) |
|
(C++17) | уничтожает диапазон объектов (шаблон функции) |
|
(C++17) | уничтожает определенное количество объектов в диапазоне (шаблон функции) |
|
(C++20) | создаёт объект по заданному адресу (шаблон функции) |
Алгоритмы неинициализированной памяти с ограничениями (с C++20)
C++20 предоставляет ограниченные алгоритмы неинициализированной памяти, которые принимают аргументы диапазона или пары итератор-предел.
Определено в заголовке <memory> |
|
|---|---|
Определено в пространстве имен std::ranges |
|
|
(C++20) | задаёт некоторые операции над итераторами, замыкателями и диапазонами, которые не вызывают исключений (только для иллюстрации*) |
|
(C++20) | копирует диапазон объектов в неинициализированную область памяти (niebloid) |
|
(C++20) | копирует заданное количество объектов в неинициализированную область памяти (niebloid) |
|
(C++20) | копирует объект в неинициализированную область памяти, задаваемую диапазоном (niebloid) |
|
(C++20) | копирует объект в неинициализированную область памяти, задаваемую началом и количеством (niebloid) |
|
(C++20) | перемещает диапазон объектов в неинициализированную область памяти (niebloid) |
|
(C++20) | перемещает заданное количество объектов в неинициализированную область памяти (niebloid) |
|
(C++20) | создаёт объекты с помощью значения по умолчанию в неинициализированной области памяти, задаваемой диапазоном (niebloid) |
|
(C++20) | создаёт объекты с помощью значения по умолчанию в неинициализированной области памяти, задаваемой началом и количеством (niebloid) |
|
(C++20) | создаёт объекты с помощью значения по умолчанию в неинициализированной области памяти, задаваемой диапазоном (niebloid) |
|
(C++20) | создаёт объекты с помощью значения по умолчанию в неинициализированной области памяти, задаваемой началом и количеством (niebloid) |
|
(C++20) | уничтожает объект по заданному адресу (niebloid) |
|
(C++20) | уничтожает диапазон объектов (niebloid) |
|
(C++20) | уничтожает заданное количество объектов в диапазоне (niebloid) |
|
(C++20) | создаёт объект по заданному адресу (niebloid) |
Поддержка сборщика мусора (до 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++23) | неявно создаёт объекты в заданном хранилище, повторно используя представление объекта (шаблон функции) |
Разное
Определено в заголовке <memory> |
|
|---|---|
|
(C++11) | предоставляет информацию о типах, подобных указателям (шаблон класса) |
|
(C++20) | получает сырой указатель из типа, подобного указателю (шаблон функции) |
|
(C++11) | получает фактический адрес объекта, даже если оператор & перегружен (шаблон функции) |
|
(C++11) | выравнивает указатель в буфере (функция) |
|
(C++20) | сообщает компилятору, что указатель выровнен (шаблон функции) |
Управление памятью низкого уровня
Включает, например, operator new, operator delete, std::set_new_handler
Определено в заголовке <new> |
|---|
Управление памятью в стиле C
Включает, например, std::malloc, std::free
Определено в заголовке <cstdlib> |
|---|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory