Почему поведение std :: memcpy не является неопределенным для объектов, которые не являются тривиально -обучаемыми?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему поведение std :: memcpy не является неопределенным для объектов, которые не являются тривиально -обучаемыми?

Сообщение Anonymous »

от http://en.cppreference.com/w/cpp/string ... y:образной. /> На моей работе мы использовали std :: memcpy < /code> в течение долгого времени для битового обмена объектами, которые не являются тривиально -экологически чистыми с помощью: < /p>

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

void swapMemory(Entity* ePtr1, Entity* ePtr2)
{
static const int size = sizeof(Entity);
char swapBuffer[size];

memcpy(swapBuffer, ePtr1, size);
memcpy(ePtr1, ePtr2, size);
memcpy(ePtr2, swapBuffer, size);
}
< /code>

и никогда не имел никаких проблем. Тем не менее, мой вопрос: < /p>

Почему поведение STD :: memcpy < /code> само по себе не определено при использовании с нетривиально-экологически чистыми объектами? Почему стандарт считает необходимым указать это? The current description says:


If the objects are not TriviallyCopyable (e.g. scalars, arrays, C-compatible structs), the behavior is undefined unless the program does not depend on the effects of the destructor of the target object (which is not run by memcpy
) and the lifetime of the target object (which is ended, but not started by memcpy < /code>) запускается каким-то другим способом, таким как размещение-новое. < /p>
< /blockquote>

ps < /strong> < /p>

Комментарий @cubbi: < /p>



Подробнее здесь: https://stackoverflow.com/questions/297 ... e-not-triv
Ответить

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

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

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

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

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