根据各种来源(例如cppreference.com),一个类必须可以轻易地复制到memcpy,但我不明白为什么一个简单的复制可构造类不够。 只要我确保将析构函数调用到适当的时间,简单的可复制类(如平凡的析构函数)的额外属性就不重要了。
有人提供示例或解释,当在类上使用memcpy时,例如非平凡的析构函数(或移动构造函数)会导致问题吗?
答案 0 :(得分:4)
平凡的可复制类(比如一个简单的析构函数)的额外属性不重要,只要我确保析构函数被调用适当的时间。
这是一个很大的"如果"但是,不是吗?这些规则旨在保护您不要调用UB,如果按位复制需要非平凡破坏的对象是合法的,这将非常容易。然后......那个非平凡的析构函数做了什么?现在共享的delete
资源?那只是乞求三条规则的问题。
如果要复制管理资源的复杂对象,确实应该使用复制构造函数正确复制它。提供std::memcpy
是为了向后兼容,并且只应与不能管理其他对象的对象一起使用。因为疯狂就是这样。