这是我的简化代码,
class ParentDict {
public:
virtual some_func();
virtual reorganize() = 0;
protected:
int _ssize;
int _lsize;
}
class ChildDict : public ParentDict {
public:
virtual some_func();
virtual reorganize(); // deserialize _arrays here;
private:
int _array_num;
char* _arrays;
}
ChildDict* deserialize(void* pool,uint64_t offset) {
void *ptr = (void *)((uint64_t)pool + offset);
ChirdDict dict = *((ChildDict *) ptr);
// HERE is the problem code
memcpy((void *)ptr,&dict,sizeof(ptr));
((ChildDict *) ptr)->reorganize();
return (ChildDict *)ptr;
}
此代码试图从文件中反序列化某些类,并且效果很好。但是CPP规则检查系统一直抱怨在包含虚拟方法的类上使用'memcpy'。
我想知道memcpy在这里做了什么。在虚拟类上使用memcpy也许并不安全,但是为什么代码在这里起作用?我可以用更好的解决方案代替它吗?