【发布时间】:2015-11-16 21:28:40
【问题描述】:
我想知道在包含数组和方法的结构上使用 memcpy 是否安全(只是一些 getter 和 setter,因为数组的索引是不寻常的,我必须以某种方式映射它)。我知道它对 POD 是安全的,但我不确定我的结构是否会被视为 POD?
【问题讨论】:
-
非虚拟成员函数,是的。见isocpp.org/wiki/faq/intrinsic-types#pod-types。
我想知道在包含数组和方法的结构上使用 memcpy 是否安全(只是一些 getter 和 setter,因为数组的索引是不寻常的,我必须以某种方式映射它)。我知道它对 POD 是安全的,但我不确定我的结构是否会被视为 POD?
【问题讨论】:
如果struct 是TriviallyCopyable,您可以使用memcpy。
您可以使用std::is_trivially_copyable 检查您的struct 是否可以轻松复制。
另外,正如@JohanLundberg 在评论中指出的那样,目标地址必须是0 模std::alignment_of<T>。您可以在http://en.cppreference.com/w/cpp/language/object#Alignment 阅读有关对象对齐要求的更多信息。
【讨论】:
std::atomic<T> 或具有显式删除的复制语义的类型。