Contents

copy move dtor 自動生成規則

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





Комментарии