C++ c++;通用到_stream()和来自_stream()的
我想知道下面的方法是否有效(我想不行,否则每个人都会使用它,对吧?:-)。我在我写的简单的类上尝试了它们,但我不知道它是否适用于一般情况。只需将对象的内存复制到C++ c++;通用到_stream()和来自_stream()的,c++,stream,memcpy,C++,Stream,Memcpy,我想知道下面的方法是否有效(我想不行,否则每个人都会使用它,对吧?:-)。我在我写的简单的类上尝试了它们,但我不知道它是否适用于一般情况。只需将对象的内存复制到CHAR[],就可以为泛型类编写to_stream()函数 例如: memcpy(buf, (void*)&object1, sizeof(object1)) 现在,我可以通过简单地将内存从CHAR[]复制到对象来为泛型类编写from_stream()函数吗 例如: memcpy(&object2, buf, buf_l
CHAR[]
,就可以为泛型类编写to_stream()
函数
例如:
memcpy(buf, (void*)&object1, sizeof(object1))
现在,我可以通过简单地将内存从CHAR[]
复制到对象来为泛型类编写from_stream()
函数吗
例如:
memcpy(&object2, buf, buf_len) // or using sizeof(C) instead of buf_len.
p、 美国。
我不打算在实际产品中使用此代码,这只是一个更好地理解内部结构的问题。
谢谢:-)不,这是可怕的未定义行为。永远不要尝试。复制构造函数和这类东西的存在是有原因的。不,这是可怕的未定义行为。永远不要尝试。复制构造函数和这类东西的存在是有原因的。正如在对的回答中所解释的,将对象视为原始字节是没有好处的。这将适用于聚合类型/POD类型,但如果该类中只有一个虚拟函数或指针/引用,您将被解雇。正如在对的回答中所解释的,将对象视为原始字节是没有用的。这将适用于聚合类型/POD类型,但如果该类中只有一个虚拟函数或指针/引用,那么您就被解雇了。您要做的是实现序列化。但是,对于具有其他引用或指针的泛型对象,您所采用的方法不起作用。您将复制它们在内存中的位置(仅它们的指针地址),这不是您的意图。当对象被“反序列化”并且内存被其他对象释放或占用时,这可能会崩溃,并且肯定会产生奇怪的结果。所以不要这样做,你要做的是实现序列化。但是,对于具有其他引用或指针的泛型对象,您所采用的方法不起作用。您将复制它们在内存中的位置(仅它们的指针地址),这不是您的意图。当对象被“反序列化”并且内存被其他对象释放或占用时,这可能会崩溃,并且肯定会产生奇怪的结果。所以不要这样做不要像这样“序列化”对象。你会犯错误,违反标准 取而代之的是,让你的对象智能化,这样你就可以以某种合理的方式序列化它们。也许看看 我想知道下面的方法是否有效(我想不行,否则每个人都会使用它,对吗?:-) 它可能在某些情况下“起作用”(例如,当使用没有虚拟成员、存储间接或其他奇特语义的POD类型时),但它是:
- 可怕的李>
- 可能调用未定义的行为
- 可怕的李>
- 可能调用未定义的行为
这就是为什么人们不这么做。取决于
object1
是什么。如果它是POD/聚合类型,这基本上就是C代码编写者所做的。这取决于object1
是什么。如果它是POD/聚合类型,这基本上就是C编码器所做的。看起来您正在尝试序列化和反序列化对象。有一个解决方案。似乎您正在尝试序列化和反序列化对象。这是有道理的。