Struct A
{
int x;
double y;
}
Struct B
{
int a;
double b;
QVector<A> v;
}
对于这种结构体,不建议或者说不要使用memset()进行置0等操作,后续在操作时直接会崩掉。
正确:
针对普通结构体,这种写法是没问题的。
A a;
memset(&a,0,sizeof(A));
针对复杂的结构体类型,不要直接使用memset()。
B b;
memset(&b,0,sizeof(B));
同理,在使用memcpy()序列化和反序列化时,普通结构体可以直接使用memcpy()。
但是在针对复杂的结构体类型,是不能直接使用memcpy的,可以分步进行memcpy。通过offsetof()函数获得位置偏移,配合memcpy进行分步序列化,与反序列化,是可以的。