Это небезопасно, нет гарантии, что структуры упакованы, между ними может быть свободное пространство для выравнивания.
Использование назначения и / или копирования безопасно, и пока не доказано обратное с профилировщиком, это так же быстро, как memcpy;).
РЕДАКТИРОВАТЬ: Если вы действительно хотите использовать memcpy, вот возможное, но ужасное решение:
struct S1 {
Pod1 P1;
Pod2 P2;
};
struct S : S1 {
vector<int> more;
};
void copy(S & Dest, S const & Src) {
memcpy(&Dest, &Src, sizeof(S1));
Dest.more = Src.more;
}