对于新移动构造函数和移动运算符,考虑是否需要实现的正确方法是什么?
作为从前C 0x转换系统的第一步,我可以删除默认的移动构造函数并移动运算符,还是应该让它们单独存在?
解决方法
所以,作为第一关,让他们独自一人.在现有代码中可能存在C 11移动语义允许移动的位置,而C 03指示副本.你的课程将继续被复制,如果这在C 03中没有引起任何性能问题,那么我无法立即想到为什么它会在C 11中出现.如果它确实导致了C 03中的性能问题,那么你就有机会修复你以前从未到过的代码中的错误,但这是一个机会,而不是义务;-)
如果您稍后实施移动构造和分配,它们将被移动,特别是如果您认为您班级的C 11客户端不太可能使用“交换优化”来避免副本,那么您将希望这样做,更有可能通过你的类型,价值等,比C 03客户.
在C 11中编写新类时,您需要根据您考虑的相同标准考虑并实现移动,并在C 03中实现交换.可以复制的类实现C 11概念“可移动”,(就像一个类一样)可以在C 03中复制的可以通过std中的默认实现进行交换,因为“可移动”并没有说明源所处的状态 – 特别是它允许不变.所以副本作为一个移动是有效的,它不一定是有效的,并且对于许多类,你会发现,与“好”移动或交换不同,副本可以抛出.
您可能会发现,如果您有析构函数(因此没有默认的移动构造函数),您必须为您的类实现move,并且您还有一个可移动但不可复制的数据成员(因此也没有默认的复制构造函数).这就是移动在语义和性能上变得重要的时候.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。