共用方式為


警告 C26432

If you define or delete any default operation in the type 'type-name', define or delete them all (c.21).

C++ 核心指導方針
C.21:如果您定義或 =刪除任何預設作業,請定義或 =刪除所有作業

假設建構函式等特殊作業會改變類型的行為,因此它們更依賴語言機制來自動強制執行特定案例。 標準範例是資源管理。 如果您明確定義、預設或刪除任何這些特殊作業,它會發出您想要避免任何特殊處理類型的訊號。 讓其他作業保持不一致,也就是說,編譯器會隱含地定義為已刪除。

備註

這項檢查會實作 項規則,將下列作業視為特殊:

  • 複製建構函式,
  • 移動建構函式,
  • 複製指派運算子,
  • 移動指派運算子和
  • 析 構 函數。

此規則不會檢查作業是否以相同方式定義。 可以混合已刪除和預設的作業與明確定義的作業。 不過,如果您指定其中任何一個,則必須指定所有它們。

存取層級並不重要,也可以混合使用。

警告會標幟類型的第一個非靜態函式定義,每個類型一次。

範例

在此範例中, warning::S 只定義預設建構函式和解構函式。 宣告 no_warning::S 會定義或刪除這五個特殊成員函式。

// C26432.cpp
namespace warning
{
    struct S
    {
        S() noexcept { ++_count; }
        ~S() { --_count; } // C26432 because only the constructor and destructor are explicitly defined.
        static unsigned _count;
    };
    unsigned S::_count = 0;
}

namespace no_warning
{
    struct S
    {
        S() noexcept { _count++;  }
        S(const S&) = delete;
        S(S&&) = delete;
        S& operator=(const S&) = delete;
        S& operator=(S&&) = delete;
        ~S() { --_count; }
        static unsigned _count;
    };
    unsigned S::_count = 0;
}