Spec-Zone.ru › C++

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

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

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

Определено в заголовке <memory>
Категории указателей
unique_ptr
(C++11)
умный указатель с уникальной семантикой владения объектом
(шаблон класса)
shared_ptr
(C++11)
умный указатель с семантикой совместного владения объектом
(шаблон класса)
weak_ptr
(C++11)
слабая ссылка на объект, управляемый std::shared_ptr
(шаблон класса)
auto_ptr
(устаревший в C++11)(удален в C++17)
умный указатель со строгими семантиками владения объектом
(шаблон класса)
Вспомогательные классы
owner_less
(C++11)
обеспечивает упорядочивание по владению указателей shared_ptr и weak_ptr различных типов
(шаблон класса)
owner_hash
(C++26)
обеспечивает хеширование по владению для shared_ptr и weak_ptr
(класс)
owner_equal
(C++26)
обеспечивает сравнение по владению указателей shared_ptr и weak_ptr различных типов
(класс)
enable_shared_from_this
(C++11)
позволяет объекту создать shared_ptr , ссылающийся на себя
(шаблон класса)
bad_weak_ptr
(C++11)
исключение, выбрасываемое при доступе к weak_ptr, который ссылается на уже удалённый объект
(класс)
default_delete
(C++11)
деструктор по умолчанию для unique_ptr
(шаблон класса)
Адаптеры умных указателей
out_ptr_t
(C++23)
взаимодействует с внешними установщиками указателей и сбрасывает умный указатель при уничтожении
(шаблон класса)
out_ptr
(C++23)
создаёт out_ptr_t с ассоциированным умным указателем и аргументами сброса
(шаблон функции)
inout_ptr_t
(C++23)
взаимодействует с внешними установщиками указателей, получает начальное значение указателя от умного указателя и сбрасывает его при уничтожении
(шаблон класса)
inout_ptr
(C++23)
создаёт inout_ptr_t с ассоциированным умным указателем и аргументами сброса
(шаблон функции)

Алокатороы

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

Определено в заголовке <memory>
allocator
алокактор по умолчанию
(шаблон класса)
allocator_traits
(C++11)
предоставляет информацию о типах алокатороы
(шаблон класса)
allocation_result
(C++23)
записывает адрес и фактический размер выделенного allocate_at_least хранилища
(шаблон класса)
allocator_arg
(C++11)
объект типа std::allocator_arg_t , используемый для выбора конструкторов, учитывающих алокатороы
(константа)
uses_allocator
(C++11)
проверяет, поддерживает ли указанный тип конструкцию с использованием алокатороы
(шаблон класса)
uses_allocator_construction_args
(C++20)
подготавливает список аргументов, соответствующий форме конструкции с использованием алокатороы, необходимой для данного типа
(шаблон функции)
make_obj_using_allocator
(C++20)
создаёт объект заданного типа с помощью конструкции с использованием алокатороы
(шаблон функции)
uninitialized_construct_using_allocator
(C++20)
создаёт объект заданного типа в заданном месте в памяти с помощью конструкции с использованием алокатороы
(шаблон функции)
Определено в заголовке <scoped_allocator>
scoped_allocator_adaptor
(C++11)
реализует алокактор нескольких уровней для контейнеров нескольких уровней
(шаблон класса)
Определено в заголовке <memory_resource>
Определено в пространстве имён std::pmr
polymorphic_allocator
(C++17)
алокактор, поддерживающий полиморфизм во время выполнения, основанный на std::pmr::memory_resource , с которым он был создан
(шаблон класса)

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

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

Определено в заголовке <memory_resource>
Определено в пространстве имён std::pmr
memory_resource
(C++17)
абстрактный интерфейс для классов, которые инкапсулируют ресурсы памяти
(класс)
new_delete_resource
(C++17)
возвращает статический общепрограммный std::pmr::memory_resource , который использует глобальные operator new и operator delete для выделения и освобождения памяти
(функция)
null_memory_resource
(C++17)
возвращает статический std::pmr::memory_resource , который не выполняет выделение
(функция)
get_default_resource
(C++17)
получает значение по умолчанию std::pmr::memory_resource
(функция)
set_default_resource
(C++17)
устанавливает значение по умолчанию std::pmr::memory_resource
(функция)
pool_options
(C++17)
набор опций конструктора для ресурсов пула
(класс)
synchronized_pool_resource
(C++17)
потокобезопасный std::pmr::memory_resource для управления выделениями в пулах различных размеров блоков
(класс)
unsynchronized_pool_resource
(C++17)
потоконебезопасный std::pmr::memory_resource для управления выделениями в пулах различных размеров блоков
(класс)
monotonic_buffer_resource
(C++17)
специальный std::pmr::memory_resource , который освобождает выделенную память только при уничтожении ресурса
(класс)

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

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

Определено в заголовке <memory>
raw_storage_iterator
(устарело в C++17)(удалено в C++20)
итератор, который позволяет стандартным алгоритмам сохранять результаты в неинициализированной памяти
(шаблон класса)
get_temporary_buffer
(устарело в C++17)(удалено в C++20)
получает неинициализированное хранилище
(шаблон функции)
return_temporary_buffer
(устарело в C++17)(удалено в C++20)
освобождает неинициализированное хранилище
(шаблон функции)

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

Определено в заголовке <memory>
uninitialized_copy
копирует диапазон объектов в неинициализированную область памяти
(шаблон функции)
uninitialized_copy_n
(C++11)
копирует определенное число объектов в неинициализированную область памяти
(шаблон функции)
uninitialized_fill
копирует объект в неинициализированную область памяти, заданную диапазоном
(шаблон функции)
uninitialized_fill_n
копирует объект в неинициализированную область памяти, заданную началом и количеством
(шаблон функции)
uninitialized_move
(C++17)
перемещает диапазон объектов в неинициализированную область памяти
(шаблон функции)
uninitialized_move_n
(C++17)
перемещает определенное число объектов в неинициализированную область памяти
(шаблон функции)
uninitialized_default_construct
(C++17)
создаёт объекты с помощью инициализации по умолчанию в неинициализированной области памяти, заданной диапазоном
(шаблон функции)
uninitialized_default_construct_n
(C++17)
создаёт объекты с помощью инициализации по умолчанию в неинициализированной области памяти, заданной началом и количеством
(шаблон функции)
uninitialized_value_construct
(C++17)
создаёт объекты с помощью инициализации значением в неинициализированной области памяти, заданной диапазоном
(шаблон функции)
uninitialized_value_construct_n
(C++17)
создаёт объекты с помощью инициализации значением в неинициализированной области памяти, заданной началом и количеством
(шаблон функции)
destroy_at
(C++17)
уничтожает объект по заданному адресу
(шаблон функции)
destroy
(C++17)
уничтожает диапазон объектов
(шаблон функции)
destroy_n
(C++17)
уничтожает определенное количество объектов в диапазоне
(шаблон функции)
construct_at
(C++20)
создаёт объект по заданному адресу
(шаблон функции)

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

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

Определено в заголовке <memory>
Определено в пространстве имен std::ranges
Итератор без исключенийИтератор со вперёд без исключенийЗамыкатель без исключенийДиапазон без исключенийДиапазон со вперёд без исключений
(C++20)
задаёт некоторые операции над итераторами, замыкателями и диапазонами, которые не вызывают исключений
(только для иллюстрации*)
ranges::uninitialized_copy
(C++20)
копирует диапазон объектов в неинициализированную область памяти
(niebloid)
ranges::uninitialized_copy_n
(C++20)
копирует заданное количество объектов в неинициализированную область памяти
(niebloid)
ranges::uninitialized_fill
(C++20)
копирует объект в неинициализированную область памяти, задаваемую диапазоном
(niebloid)
ranges::uninitialized_fill_n
(C++20)
копирует объект в неинициализированную область памяти, задаваемую началом и количеством
(niebloid)
ranges::uninitialized_move
(C++20)
перемещает диапазон объектов в неинициализированную область памяти
(niebloid)
ranges::uninitialized_move_n
(C++20)
перемещает заданное количество объектов в неинициализированную область памяти
(niebloid)
ranges::uninitialized_default_construct
(C++20)
создаёт объекты с помощью значения по умолчанию в неинициализированной области памяти, задаваемой диапазоном
(niebloid)
ranges::uninitialized_default_construct_n
(C++20)
создаёт объекты с помощью значения по умолчанию в неинициализированной области памяти, задаваемой началом и количеством
(niebloid)
ranges::uninitialized_value_construct
(C++20)
создаёт объекты с помощью значения по умолчанию в неинициализированной области памяти, задаваемой диапазоном
(niebloid)
ranges::uninitialized_value_construct_n
(C++20)
создаёт объекты с помощью значения по умолчанию в неинициализированной области памяти, задаваемой началом и количеством
(niebloid)
ranges::destroy_at
(C++20)
уничтожает объект по заданному адресу
(niebloid)
ranges::destroy
(C++20)
уничтожает диапазон объектов
(niebloid)
ranges::destroy_n
(C++20)
уничтожает заданное количество объектов в диапазоне
(niebloid)
ranges::construct_at
(C++20)
создаёт объект по заданному адресу
(niebloid)

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

Определено в заголовке <memory>
declare_reachable
(C++11)(удалено в C++23)
объявляет, что объект не может быть переиспользован
(функция)
undeclare_reachable
(C++11)(удалено в C++23)
объявляет, что объект может быть переиспользован
(шаблон функции)
declare_no_pointers
(C++11)(удалено в C++23)
объявляет, что область памяти не содержит отслеживаемых указателей
(функция)
undeclare_no_pointers
(C++11)(удалено в C++23)
отменяет действие std::declare_no_pointers
(функция)
pointer_safety
(C++11)(удалено в C++23)
перечисляет модели безопасности указателей
(перечисление)
get_pointer_safety
(C++11)(удалено в C++23)
возвращает текущую модель безопасности указателей
(функция)

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

Определено в заголовке <memory>
start_lifetime_asstart_lifetime_as_array
(C++23)
неявно создаёт объекты в заданном хранилище, повторно используя представление объекта
(шаблон функции)

Разное

Определено в заголовке <memory>
pointer_traits
(C++11)
предоставляет информацию о типах, подобных указателям
(шаблон класса)
to_address
(C++20)
получает сырой указатель из типа, подобного указателю
(шаблон функции)
addressof
(C++11)
получает фактический адрес объекта, даже если оператор & перегружен
(шаблон функции)
align
(C++11)
выравнивает указатель в буфере
(функция)
assume_aligned
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API