首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该在包含虚拟方法的类上使用'memcpy‘吗?如果没有,该如何更换?

我应该在包含虚拟方法的类上使用'memcpy‘吗?如果没有,该如何更换?
EN

Stack Overflow用户
提问于 2019-11-26 09:25:26
回答 1查看 308关注 0票数 2

这是我的简化代码,

代码语言:javascript
复制
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并不安全,但是为什么代码在这里工作呢?我能用更好的解决方案来代替它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-26 15:17:43

要给出一个真正的答案:为了避免抄袭,你有两个主要的选择:

  1. 创建自定义序列化和反序列化函数,这些函数“手动”形成或解释字节数组。或者,如果数据大小不太重要,就将数据转换为在变量之间带有分隔符的字符串。
  2. 将所有需要序列化的成员放在一个简单的结构中,而不需要虚拟函数,并使其成为类的成员。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59047606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档