В другом question я неправильно использовал термин 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) { }
}
Считая черновик С++ 0x, моя структура будет выглядеть тривиально скопируемым классом (9.1). Я считаю, что memcpy будет безопасным.