知识卡片
特殊成员联动
内容
特殊成员包括默认构造、析构、拷贝构造与赋值、移动构造与赋值。用户声明拷贝或析构等成员会抑制隐式移动,声明移动又影响隐式拷贝。成员函数模板不抑制这些特殊成员的生成,即使模板可实例化出近似拷贝的签名。资源类型应整体检查这些能力,尤其别把“能接受右值”误判为“确有移动构造”。
参考来源
- 位置:《Effective Modern C++》第3章《移步现代C++》,条款十七:理解特殊成员函数的生成(源文件:_epub-src/EPUB/text/ch004.xhtml)
- 结论依据:原文列出六类特殊成员与隐式生成抑制条件,支持整体检查类型复制和移动能力。
- 原始内容:特殊成员函数是编译器可能自动生成的函数:默认构造函数,析构函数,拷贝操作,移动操作。 移动操作仅当类没有显式声明移动操作,拷贝操作,析构函数时才自动生成。 拷贝构造函数仅当类没有显式声明拷贝构造函数时才自动生成,并且如果用户声明了移动操作,拷贝构造就是 delete 。拷贝赋值运算符仅当类没有显式声明拷贝赋值运算符时才自动生成,并且如果用户声明了移动操作,拷贝赋值运算符就是 delete 。当用户声明了析构函数,拷贝操作的自动生成已被废弃。 成员函数模板不…