memcpy和C ++类模板 - 如何使用它?

时间:2011-01-23 04:28:22

标签: c++ oop templates copy memcpy

那么..我们怎么称呼这样的东西 memcpy(dataCopy,data,length);复制抽象数据T?

或者,如果抽象T不安全,我们就知道T是POD(普通旧数据,基本上是C结构) - 是否可以复制它?

3 个答案:

答案 0 :(得分:3)

你的意思是为一些任意的C ++类型T工作吗?除非您知道T是POD(普通旧数据,基本上是C结构)类型,否则使用T复制memcpy类型的对象是不安全的。例如,这会阻止T的复制构造函数运行,这可能导致错误的复制(例如,尝试memcpy std::vector不会复制数据缓冲区。

答案 1 :(得分:3)

cant 可靠地做到这一点。如果它如此简单,可能和可靠,那么程序员就不会重载operator=()并编写复制构造函数。

如果你想复制你的对象,那么要么重载operator=(),要么写一个copy-constructor,或者两者都做!

答案 2 :(得分:0)

这可能很危险,具体取决于T的类型。如果T是POD类型,那么一切都很好。否则,我建议您只需调用T的复制构造函数(或者如果不可能则使用克隆模式)。