微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我们什么时候应该编写自己的移动构造函数移动赋值运算符

如何解决我们什么时候应该编写自己的移动构造函数移动赋值运算符

用户定义的移动构造函数移动赋值运算符可以在解释移动语义的所有示例中省略,因为编译器生成的将完成这项工作。

我在 stackoverflow 中找到的答案不会超出“三规则”(五规则)——所以如果一个类定义了以下任何一个,那么它可能应该明确定义所有五个。

但是对于复制构造函数和所有其他成员来说,原因很明显,并且可以很容易地编写一个示例来说明如果用户定义的复制构造函数不存在会出现什么问题。

在维基百科中我们可以找到:

当对象拥有指针或不可共享的引用(例如指向文件)时,通常需要用户定义的复制构造函数

所以问题是是否有示例可以显示是否真的需要用户定义的移动构造函数或移动赋值运算符,或者我可以假设在 99% 的情况下编译器生成的就足够了。

解决方法

我想一个必要的自定义移动操作的例子是一个由容器和一些指向其内容的指针组成的类;比如说,一个带有头部和尾部的循环缓冲区。 但确实,这样写并不常见。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。