Spec-Zone.ru › C++

C++ именованные требования: Уничтожаемый (с C++11)

Указывает, что объект типа может быть уничтожен заданным Аллекатором.

Требования

Тип T является Уничтожаемым из Контейнера X, чей value_type идентичен T, если, учитывая

A тип аллокатора
m lvalue типа A
p указатель типа T*, подготовленный контейнером

где X::allocator_type идентичен std::allocator_traits<A>::rebind_alloc<T>,

следующее выражение является допустимым:

std::allocator_traits<A>::destroy(m, p);

Если X не поддерживает аллокаторы или является специализацией std::basic_string, термин определяется как если бы A был std::allocator<T>, за исключением того, что не нужно создавать объект аллокатора, и пользовательские специализации std::allocator не подключаются.

Примечания

Все стандартные контейнеры библиотеки требуют, чтобы их тип элемента удовлетворял требованию Уничтожаемый.

С использованием по умолчанию аллокатора, это требование эквивалентно валидности p->~T(), которое принимает типы классов с доступными деструкторами и все скалярные типы, но отвергает массивы, типы функций, типы ссылок и void.

(до C++20)

С использованием по умолчанию аллокатора, это требование эквивалентно валидности std::destroy_at(p), которое принимает типы классов с доступными деструкторами и все скалярные типы, а также массивы из них.

(с C++20)

Хотя при уничтожении элементов std::basic_string требуется использование настраиваемого destroy до C++23, все реализации использовали только механизм по умолчанию. Требование исправлено в P1072R10 для соответствия существующей практике.

См. также

Копируемый вставляемый
Перемещаемый вставляемый
Конструируемый с помощью emplace
Деструктируемый

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/Erasable

Spec-Zone.ru

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