Признак типа C++, говорящий «тривиально подвижный» — примерыC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Признак типа C++, говорящий «тривиально подвижный» — примеры

Сообщение Гость »


Я бы определил термин «тривиально подвижный» как

Вызов конструктора перемещения (или оператора присваивания перемещения) эквивалентно memcpy для передачи байтов в новое место назначения без вызова деструктор перемещенного объекта.

Например, если вы знаете, что это свойство сохраняется, вы можете использовать realloc для изменения размера std::vector или пула памяти.

Типы, которые не справляются с этой задачей, обычно имеют указатели на их содержимое, которое необходимо обновить с помощью конструктора перемещения/оператора присваивания.

Я не могу найти таких типовых признаков в стандарте. Мне интересно, есть ли у этого уже (лучшее) имя, обсуждалось ли оно и есть ли какие-нибудь библиотеки, использующие такую ​​особенность.

Изменить 1:

Судя по первым нескольким комментариям, std::is_тривиально_move_constructible и std::is_тривиально_move_assignable не эквивалентны тому, что я ищу. Я считаю, что они бы дали true для типов, содержащих указатели на самих себя, поскольку чтение вашего собственного члена, похоже, подпадает под «тривиальную» операцию.

Изменить 2:

При правильной реализации типы, указывающие на себя, не будут тривиально_move_constructible или move_assignable, поскольку оператор перемещения/перемещения больше не является тривиальным. Однако мы должны быть в состоянии сказать, что unique_ptr можно безопасно скопировать в новое место, если мы не вызываем его деструктор.
Ответить

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

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

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

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

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