memcpy 和 C++类模板 - 如何使用它?
那么..我们怎么称呼类似的东西 memcpy(数据复制,数据,长度);复制抽象数据T?
或者,如果抽象 T 不安全,可以说我们知道 T 是一个 POD(普通旧数据,基本上是一个 C 结构)——是否可以复制它?
So.. How can we call something like
memcpy(dataCopy, data, length); to copy abstract data T?
Or if abstract T is not safe lets say we know that T is a POD (plain old data, basically a C struct) - is it possible to copy it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的意思是为任意 C++ 类型
T
工作吗?除非您知道T
是 POD(普通旧数据,基本上是 C 结构)类型,否则使用memcpy< 复制
T
类型的对象是不安全的/代码>。例如,这会阻止T
的复制构造函数运行,这可能会导致错误的复制(尝试memcpy
为std::vector
例如,不会复制数据缓冲区)。Do you mean working for some arbitrary C++ type
T
? Unless you know thatT
is a POD (plain old data, basically a C struct) type, it is not safe to copy objects of typeT
withmemcpy
. That would preventT
's copy constructor from running, for example, which might lead to an incorrect copy (trying tomemcpy
anstd::vector
would not copy the data buffer, for example).你不能可靠地做到这一点。如果它如此简单、可行且可靠,那么程序员就不会重载
operator=()
并编写复制构造函数。如果你想复制你的对象,那么要么重载operator=(),要么编写复制构造函数,或者两者都做!
You cant do that reliably. If it was so easy, possible and reliable, then programmers would not be overloading
operator=()
and writing copy-constructor.If you want to make a copy of your object, then either overload
operator=()
, or write copy-constructor, or do both!根据 T 的类型,这可能会很危险。如果 T 是 POD 类型,则一切正常。否则,我建议您只需调用 T 的复制构造函数(如果不可能,则使用克隆模式)。
This could be dangerous depending on the type of T. If T is a POD type, then everything's all right. Otherwise, I suggest you simply call T's copy constructor (or use a clone pattern if it's not possible).