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

发布于 2024-10-13 11:19:19 字数 120 浏览 5 评论 0原文

那么..我们怎么称呼类似的东西 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

ま昔日黯然 2024-10-20 11:19:19

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

Do you mean working for some arbitrary C++ type T? Unless you know that T is a POD (plain old data, basically a C struct) type, it is not safe to copy objects of type T with memcpy. That would prevent T's copy constructor from running, for example, which might lead to an incorrect copy (trying to memcpy an std::vector would not copy the data buffer, for example).

空城缀染半城烟沙 2024-10-20 11:19:19

不能可靠地做到这一点。如果它如此简单、可行且可靠,那么程序员就不会重载 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!

盛夏已如深秋| 2024-10-20 11:19:19

根据 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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文