1
项目17:了解特殊的成员函数生成。“有效的现代C++”中的C++默认移动操作
移动的操作仅支持入级缺乏
明确宣布移动操作产生,复制操作, 或析构函数。现在,当我指的是移动操作布展施工
或移动,分配数据成员或基类,有
不能保证此举将实际发生。
“成员移动”实际上更像是成员移动
移动请求,因为未启用移动的类型(...)
将通过其复制操作“移动”。
但是,我无法在我的环境中验证它们。
// compiled
#include <iostream>
using namespace std;
class Base {
public:
~Base() {}
};
int main() {
Base a, c;
Base b(move(a));
c = move(b);
// explicitly destructor does not disable
// default move constuctor and move assignment operator
return 0;
}
class Base {
public:
Base() {}
Base(Base& b) {}
~Base() {}
};
class Num {
private:
Base b;
};
int main() {
Num a, c;
c = move(a); // passed
Num b(move(c)); // error
// explicitly Base::Base(Base& b) disable default move
// move conctructor.
// Num's default move constructor can not find any move
// constructor for member object Base b, which lead to an
// error. Num's default move constructor does not "moved"
// Base b via their copy operations which is declared.
return 0;
}
的第一个断言可能从环境会有所不同,但第二个几乎是错的。
我对此很困惑。 请帮我一把。
感谢您的解释!我现在很清楚! – gfxcc