首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要有一个类是std::is_trivially_copyable而不是std::is_trivially_copy_constructible才能在memcpy中使用

为什么要有一个类是std::is_trivially_copyable而不是std::is_trivially_copy_constructible才能在memcpy中使用
EN

Stack Overflow用户
提问于 2016-02-03 15:28:51
回答 1查看 778关注 0票数 4

根据各种消息来源(例如,cppreference.com),类必须是微不足道的可复制的,才能在memcpy中使用,但我不明白为什么一个微不足道的可复制构造类是不够的。只要我确保析构函数在适当的时候被调用,那么琐碎的可复制类的额外属性(比如一个微不足道的析构函数)就不重要了。

如果在类上使用memcpy (例如,非平凡的析构函数(或移动构造函数))会导致问题,有人能提供示例或解释吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-03 15:32:52

只要我确保析构函数在适当的时候被调用,那么琐碎的可复制类的额外属性(比如一个微不足道的析构函数)就不重要了。

不过,这是个大的“如果”,不是吗?这些规则旨在保护您不被调用UB,如果按位复制需要非平凡销毁的对象是合法的,这将是非常容易的。然后..。这个非平凡的析构函数是做什么的?现在共享的delete资源?这只是在乞求三的规则有问题。

如果您想要复制管理资源的复杂对象,您确实应该使用复制构造函数正确地复制它。std::memcpy是为了向后兼容性而提供的,只应该与没有其他对象可管理的对象一起使用。因为这种方式是疯狂的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35181088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档