C ++通用to_stream()和from_stream()

我不知道下面的工作(我想不会的,否则每个人都用过了吧?:-))。 我想他们只是类我写的,但我不知道它是否适合一般情况。 我们可以写一个to_stream()通过简单的复制对象的内存泛型类函数CHAR[]

例如:

memcpy(buf, (void*)&object1, sizeof(object1))

现在,我可以写一个from_stream()函数的泛型类通过简单地从存储器复制CHAR[]的对象?

例如:

memcpy(&object2, buf, buf_len) // or using sizeof(C) instead of buf_len.

PS我不打算在实际产品使用此代码,这仅仅是为了更好地了解内部的问题。 谢谢:-)

--------------解决方案-------------

作为一个答案解释这个问题,你会做没有很好的治疗对象,就好像它们是原始字节。 这将为聚合类型/ POD类型的工作,但如果你有一个,但虚函数或某一类的指针/引用,你F * cked。

不,这是可怕未定义的行为。 千万不要尝试。 拷贝构造函数和那种事是有原因的存在。

你现在要做的就是实现系列化。 你正在做虽然不会为有其他的引用或指针的通用对象的工作方式。 你会在内存复制他们的位置(只有他们的指针地址),这是不是你的意图。 这可能会崩溃,一定会给奇怪的结果,当对象被“反序列化”,并释放内存或其他对象占用。 所以 ,不要去做。

不要“还原序列化的”对象是这样的。 你会得到它错误的,违反了标准。

相反,让你的智能对象,这样你可以在一些合理的方式连载他们。 也许看看Boost.Serialize。

我不知道下面的工作(我想不会的,否则每个人都用过了吧?:-))

它可能在某些情况下“工作”(例如,与没有虚拟成员,存储间接或其他花哨的语义谁POD类型时),但它是:

  • 阴森;
  • 大概调用未定义行为。

这就是为什么人们不这样做。

分类:C# 时间:2015-03-15 人气:0
本文关键词: 流的memcpy
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.318 (s). 10 q(s)