Необходимо вызвать тривиальный деструктор в стандартных контейнерах.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Необходимо вызвать тривиальный деструктор в стандартных контейнерах.

Сообщение Anonymous »

Я реализую свою собственную версию контейнеров, соответствующих стандартам. Я прочитал следующее. В нем говорится, что элементы следует уничтожать с помощью распределителя уничтожения. Означает ли это, что контейнер должен вызывать деструктор элементов, даже если это тривиально? Моя интерпретация такова: сначала нам нужно вызвать деструктор. Если да, то мы должны использовать распределитель-разрушитель. В противном случае нам также не нужно вызывать уничтожение распределителя. Согласно этой интерпретации, мы можем пропустить вызов уничтожения распределителя для элементов с тривиальным деструктором. Это может привести к оптимизации контейнеров последовательностей.
Из стандарта cpp20:

Для компонентов, на которые распространяется действие этого подпункта, которые объявить

Код: Выделить всё

allocator_type
, объекты, хранящиеся в этих компонентах, должны быть
созданы с использованием функции

Код: Выделить всё

allocator_traits::rebind_traits::construct
и
уничтожается с помощью функции

Код: Выделить всё

allocator_traits::rebind_traits::destroy
(20.10.9.2), где U — это либо allocator_type::value_type, либо
внутренний тип, используемый контейнером.


Подробнее здесь: https://stackoverflow.com/questions/792 ... containers
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»