Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;通用到_stream()和来自_stream()的_C++_Stream_Memcpy - Fatal编程技术网

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类型时),但它是:

  • 可怕的
  • 可能调用未定义的行为
这就是人们不这样做的原因。

不要像这样“序列化”对象。你会犯错误,违反标准

取而代之的是,让你的对象智能化,这样你就可以以某种合理的方式序列化它们。也许看看

我想知道下面的方法是否有效(我想不行,否则每个人都会使用它,对吗?:-)

它可能在某些情况下“起作用”(例如,当使用没有虚拟成员、存储间接或其他奇特语义的POD类型时),但它是:

  • 可怕的
  • 可能调用未定义的行为

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

取决于
object1
是什么。如果它是POD/聚合类型,这基本上就是C代码编写者所做的。这取决于
object1
是什么。如果它是POD/聚合类型,这基本上就是C编码器所做的。看起来您正在尝试序列化和反序列化对象。有一个解决方案。似乎您正在尝试序列化和反序列化对象。这是有道理的。