提问人:daenin 提问时间:11/8/2020 最后编辑:daenin 更新时间:11/8/2020 访问量:185
复制构造函数是否有助于 C++ 中的 memcpy?
Are copy constructors helping with memcpy in C++?
问:
我正在使用基于C++的框架,该框架基于重写规则。个人重写规则是由像我这样的开发人员编写的。重写规则接口中的参数可以使用任何类型化变量进行定义。该框架似乎所做的是在应用重写规则时将 memcpy 应用于所有参数。
现在,我使用 C++ 对象的实例(从多个抽象类继承有点复杂)作为重写规则的参数。 毫不奇怪,memcpy 只取得了部分成功,在应用重写规则后,我的许多对象成员都搞砸了。特别是,指针、映射和向量成员被搞砸了。
从我所读到的内容中,我了解到 memcpy 是一种相当低级的复制机制。 我想知道是否有任何方法可以帮助解决 memcpy 期间发生的混乱? 例如,如果我为所有类定义了复制构造函数 - memcpy 是否能够使用它们? 对不起,如果这是一个愚蠢的问题。
(如果没有办法让 memcpy 适用于复杂实例,那么我会得出结论,我一直在使用的框架不适合传递对象)
答:
1赞
463035818_is_not_an_ai
11/8/2020
#1
将 src 指向的对象与 dest 指向的对象复制计数字节数。这两个对象都被重新解释为无符号字符数组。
memcpy
复制字节。它不知道它实际复制了什么。
...Memcpy能够利用它们吗?
不。
附言
框架使用 memcpy 来复制C++对象听起来很奇怪,因为除了某些特殊情况外,这是错误的(参见 std::is_trivially_copyable)。或者,也许你误解了什么。背景太少,无法提供进一步的建议
评论
0赞
daenin
11/8/2020
非常感谢您的帮助!是的,我发现 memcpy 的使用也很奇怪。有一些关于 memcpy 的编译器警告。这是一个相当古老的框架,可能不用于传递对象,而仅适用于简单类型。因此,在这种情况下,我可能会将框架的使用延伸得太远。
0赞
463035818_is_not_an_ai
11/8/2020
@daenin我对你对“对象”和“简单类型”之间的区别有点困惑。在C++中没有这种区别(见此处 en.cppreference.com/w/cpp/language/type)。另外,为什么你使用什么框架这么秘密?;)同样在 20 年前,顺便说一句,用它来复制对象并不是一个好主意memcpy
0赞
daenin
11/8/2020
这不是秘密,我想说这只是一个极端的利基框架。它可以在“算法植物学”下找到,并使用一种名为 lpfg 的小型编程语言。
下一个:C++ 如何使用复制构造函数
评论