我应该在包含虚拟方法的类上使用“ memcpy”吗?如果没有,该如何替换?

这是我的简化代码,

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也许并不安全,但是为什么代码在这里起作用?我可以用更好的解决方案代替它吗?

djr15 回答:我应该在包含虚拟方法的类上使用“ memcpy”吗?如果没有,该如何替换?

要真正给出答案:为了避免使用内存复制,您有两个主要选择:

  1. 创建自定义的序列化和反序列化函数,以“手动”形成或解释字节数组。或者,如果数据大小不太重要,则将数据转换为字符串,并在变量之间使用一些定界符。

  2. 将所有需要序列化的成员放入一个没有虚函数的简单结构中,并使其成为类的成员。

本文链接:https://www.f2er.com/3030455.html

大家都在问