Да, безопасно копировать с помощью memcpy, потому что вы конструктор только инициализируете значения.

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

Я имею в виду тип данных POD, но он может содержать функции, включая конструкторы, но ничего, что не должно изменять его характеристики выравнивания или размера по сравнению с эквивалентным типом POD.

В разделе 3.9 стандарта говорится, что данные POD могут быть скопированы с помощью memcpy либо в другой объект, либо в символьные данные и обратно. На данные, не относящиеся к POD, такая гарантия не предоставляется.

Однакопредставление объекта объекта определяется в том же разделе. Он определен так, что можно полагать, что любые два объекта одного типа могут быть безопасно скопированы через memcpy.

Итак, мои вопросы:

Действительно ли копия с memcpy гарантированно безопасна для таких объектов?Если да, то почему есть специальное примечание о memcpy и POD?Есть ли название для этого типа данных, которые безопасны для memcpy?

Простой пример типа объекта, который я имею в виду:

struct ex_struct
{
  int a,b,c,d;
  ex_struct() : a(123) { }
}

Читая черновик C ++ 0x, моя структура выглядит кактривиально копируемый класс (9.1). Я полагаю, что подразумевает, что memcpy будет в безопасности.

Ответы на вопрос(1)

Ваш ответ на вопрос