C++20 中的复制和交换习语 [已关闭]

The copy-and-swap idiom in C++20 [closed]

提问人:traveh 提问时间:10/20/2022 更新时间:10/20/2022 访问量:128

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章用事实和引文来回答。

去年关闭。

我在 12 年前找到了这个很好的答案,它解释了复制和交换习语以及如何在 C++11 和 C++03 中实现它。

我的问题是:这仍然是推荐的解决方案,还是在更高版本的 C++ 中发生了变化?(特别是我目前正在使用 C++20)

C++ C++20 复制和交换

评论

2赞 ChrisMM 10/20/2022
这仍然是推荐的解决方案吗,真的是基于意见的......它仍然有效吗?是的。
1赞 NathanOliver 10/20/2022
恕我直言,您应该在课堂上使用 RAII 类型,因此您甚至不需要使用复制和交换习语。默认值将只是“做正确的事”。
1赞 Remy Lebeau 10/20/2022
同意。Copy+Swap 只有在您编写一个必须实现 3 规则或 5 规则才能正确管理某些内部资源的类时才会发挥作用。如果您努力在课堂上实施 0 规则,那么您不必担心这一点。
0赞 Ben Voigt 10/20/2022
@NathanOliver:默认值不会做正确的事情。强异常保证不会自动撰写。具体而言,复合类型的默认赋值运算符将执行 Copy Subobject A、Swap A、Copy Subobject B、Swap B,所需的顺序为 Copy Subobject A、Copy Subobject B、Swap A、Swap B。
0赞 traveh 10/20/2022
感谢您的所有评论...然而,我现在更加困惑于什么是最好的解决方案......我在这里发布了一个更具体的问题:stackoverflow.com/q/74131192/2375105

答:

1赞 Abazoo 10/20/2022 #1

如果您需要安全性和舒适性而不是性能,它仍然是最佳解决方案。霍华德·辛南特(Howard Hinnant)建议你自己滚动,但前提是你真的知道如何去做,并且真的真的需要最后一盎司的性能。