Update item17.md

This commit is contained in:
猫耳堀川雷鼓 2021-02-16 15:55:06 +08:00 committed by GitHub
parent 17d196d1cd
commit a0d0024be3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,7 +1,7 @@
## 条款十七:理解特殊成员函数的生成
**Item 17: Understand special member function generation**
在C++术语中,**特殊成员函数**是指C++自己生成的函数。C++98有四个默认构造函数析构函数拷贝构造函数拷贝赋值运算符。当然这有些细则。这些函数仅在需要的时候才生成比如某个代码使用它们但是它们没有在类中明确声明。默认构造函数仅在类完全没有构造函数的时候才生成。防止编译器为某个类生成构造函数但是你希望那个构造函数有参数生成的特殊成员函数是隐式public且`inline`,它们是非虚的,除非相关函数是在派生类中的析构函数,派生类继承了有虚析构函数的基类。在这种情况下,编译器为派生类生成的析构函数是虚的。
在C++术语中,**特殊成员函数**是指C++自己生成的函数。C++98有四个默认构造函数析构函数拷贝构造函数拷贝赋值运算符。当然有些细则要注意。这些函数仅在需要的时候才生成比如某个代码使用它们但是它们没有在类中明确声明。默认构造函数仅在类完全没有构造函数的时候才生成。防止编译器为某个类生成构造函数但是你希望那个构造函数有参数生成的特殊成员函数是隐式public且`inline`,它们是非虚的,除非相关函数是在派生类中的析构函数,派生类继承了有虚析构函数的基类。在这种情况下,编译器为派生类生成的析构函数是虚的。
但是你早就知道这些了。好吧好吧都说古老的历史美索不达米亚商朝FORTRANC++98。但是时代改变了C++生成特殊成员的规则也改变了。要留意这些新规则知道什么时候编译器会悄悄地向你的类中添加成员函数因为没有什么比这件事对C++高效编程更重要。