【发布时间】:2016-02-03 23:32:52
【问题描述】:
根据各种来源(例如cppreference.com),一个类必须可以简单地复制才能与 memcpy 一起使用,但我不明白为什么简单地复制可构造类是不够的。 只要我确保在适当的时间调用析构函数,普通可复制类的额外属性(如普通析构函数)就无关紧要了。
谁能提供一个例子或解释,当在一个类上使用 memcpy 时,例如一个非平凡的析构函数(或移动构造函数)会导致问题?
【问题讨论】:
-
如果你已经有一个现有的对象,那么用
memcpy改变它的值不是构造,它更接近于赋值。所以认为只有复制构造函数很重要是错误的。 -
@jonathan-wakely 我没有现有的对象,我只有一些内存。从概念上讲,它类似于放置新。
-
那么您是否建议应该为您现在拥有的特定用例量身定制语言规则?这些规则包括将现有对象复制到未初始化的内存,但它们也包括将现有对象复制到另一个现有对象。仅仅因为您现在只关心第一种情况并不意味着规则是错误的。
-
如果你想初始化原始内存,那么placement new有什么问题呢?为什么
memcpy更可取? -
@jonathan-wakely 我有点想知道 is_trivially_copy_constructible 到底有什么用处,如果不是我的用例的话。如果/我的用例会遇到麻烦。
标签: c++