Да, безопасно копировать с помощью 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 будет в безопасности.