【发布时间】:2020-04-17 19:34:44
【问题描述】:
我正在寻找以下解释的答案(来自“C++ 之旅”一书)
MyClass& operator=(const MyClass&) // copy asignment: clean up target and copy
我从来没有清理过目标 (或者至少我不明白这是什么意思)复制时:
- 复制的想法不就是拥有两个相同的东西吗?
- 如果我清理目标,那不是
move吗? -
清理目标到底是什么意思?
- 参考也是
const所以我不会 可以修改它
- 参考也是
在书中它指出:
MyClass& operator=(MyClass&&) // move assignment: clean up target and move
在这里清理目标是有意义的,因为这就是我理解move -ing 的工作原理
【问题讨论】:
-
那个目标是调用操作符的对象,而不是传递的参数
-
大概他们的意思是在从被分配对象复制它们之前清理/释放被分配对象所拥有的任何资源到。
-
可能意味着您在复制发生之前删除了当前对象的旧残余(例如分配的内存)。但这无论如何都是个坏建议,因为如果您在复制完成之前开始更改
*this的值而不抛出异常,那么赋值运算符就有缺陷。通常做的是copy / swap,在这里你使用传入对象的临时副本,并对this的成员和临时对象做简单的std::swap's。 -
目标是
=左侧的值。