Contents
- 本文是 C++ 11/14 的規則,C++ 98 沒有 move sematic,dtor、copy operation 規則會有差異
- template 不會有以下規則,會全部自動生成
Default Constructor
- 當沒有宣告時 Compiler 才會自動生成
Destructor
- 當沒有宣告時 Compiler 才會自動生成,且預設是
noexcept
- 如果 base class 是
virtual
,也會生成virtual
Copy Operation
- 包含 copy ctor、copy assignment
- 當 copy data member 時,只會 copy non-static
- Compiler 自動生成 copy operation 的必要條件
- 沒有宣告該 operation
- 沒有宣告任何 move operation
Rule of Three
- 如果至少宣告了 copy ctor、copy assignment 或 dtor 的其中一個,應該要把剩下的都一併宣告
Move Operation
- 包含 move ctor、move assignment
- 當 move data member 時,只會 move non-static 且有定義所需的 move operator,如果沒有定義則會使用 copy operator
- Compiler 自動生成 copy operation 的三個必要條件
- 沒有宣告任何 copy operation
- 沒有宣告任何 move operation
- 沒有宣告 dtor
Best Practice
- 顯式的使用
default
來標註 compiler 自動產生的 operation
Комментарии