gpt4 book ai didi

c++ - 为什么有一个类是 std::is_trivially_copyable 而不是 std::is_trivially_copy_constructible 可以与 memcpy 一起使用

转载 作者:太空狗 更新时间:2023-10-29 20:55:40 25 4
gpt4 key购买 nike

根据各种来源(例如 cppreference.com ),一个类必须是平凡可复制的才能与 memcpy 一起使用,但我不明白为什么平凡复制可构造类是不够的。普通可复制类(如普通析构函数)的额外属性应该无关紧要,只要我确保在适当的时间调用析构函数即可。

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

最佳答案

The extra properties of trivially copyable classes (like a trivial destructor) shouldn't matter, as long as I make sure the destructor gets called a the appropriate time.

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

如果你想复制一个管理资源的复杂对象,你真的应该使用复制构造函数正确地复制它。 std::memcpy 是为了向后兼容而提供的,应该只用于没有其他对象要管理的对象。因为疯狂就在于此。

关于c++ - 为什么有一个类是 std::is_trivially_copyable 而不是 std::is_trivially_copy_constructible 可以与 memcpy 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35181088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com