根据各种消息来源(例如,cppreference.com),类必须是微不足道的可复制的,才能在memcpy中使用,但我不明白为什么一个微不足道的可复制构造类是不够的。只要我确保析构函数在适当的时候被调用,那么琐碎的可复制类的额外属性(比如一个微不足道的析构函数)就不重要了。
如果在类上使用memcpy (例如,非平凡的析构函数(或移动构造函数))会导致问题,有人能提供示例或解释吗?
发布于 2016-02-03 15:32:52
只要我确保析构函数在适当的时候被调用,那么琐碎的可复制类的额外属性(比如一个微不足道的析构函数)就不重要了。
不过,这是个大的“如果”,不是吗?这些规则旨在保护您不被调用UB,如果按位复制需要非平凡销毁的对象是合法的,这将是非常容易的。然后..。这个非平凡的析构函数是做什么的?现在共享的delete资源?这只是在乞求三的规则有问题。
如果您想要复制管理资源的复杂对象,您确实应该使用复制构造函数正确地复制它。std::memcpy是为了向后兼容性而提供的,只应该与没有其他对象可管理的对象一起使用。因为这种方式是疯狂的。
https://stackoverflow.com/questions/35181088
复制相似问题