所以..我们如何调用 memcpy(dataCopy, data, length); 复制抽象数据 T?
或者,如果抽象 T 不安全,可以说我们知道 T 是 POD(普通旧数据,基本上是 C 结构) - 是否可以复制它?
你的意思是为一些任意的 C++ 类型工作T
吗?除非您知道这T
是 POD(普通旧数据,基本上是 C 结构)类型,否则T
使用memcpy
. 这将阻止T
' 的复制构造函数运行,例如,这可能导致不正确的复制(例如,尝试memcpy
复制std::vector
数据缓冲区不会复制)。
你不能可靠地做到这一点。如果它如此简单、可行和可靠,那么程序员就不会重载operator=()
和编写复制构造函数。
如果你想复制你的对象,那么要么重载operator=()
,要么编写复制构造函数,或者两者都做!
根据 T 的类型,这可能很危险。如果 T 是 POD 类型,那么一切都很好。否则,我建议您只需调用 T 的复制构造函数(如果不可能,则使用克隆模式)。