共用方式為


編譯器錯誤 C2316

'class_type' : 無法攔截解構函式和/或複製建構函式無法存取或刪除

值或傳址攔截到例外狀況,但無法存取複製建構函式、指派運算元或兩者。

備註

Visual Studio 2015 中的一致性變更使得此錯誤適用於衍生自 CException之 MFC 例外狀況的錯誤 catch 語句。 因為 CException 有繼承的私人複製建構函式,所以類別及其衍生專案不可複製,而且無法以值傳遞,這也表示無法依值攔截它們。 依值擷取 MFC 例外狀況的 Catch 語句,導致運行時間發生未攔截的例外狀況。 現在編譯程式會正確識別這種情況,並回報錯誤 C2316。 若要修正此問題,建議您使用 MFC TRY/CATCH 巨集,而不是撰寫您自己的例外狀況處理程式。 如果這不適用於您的程式代碼,請改為依參考攔截 MFC 例外狀況。

範例

下列範例會產生 C2316,並示範修正它的方式:

// C2316.cpp
// compile with: /EHsc
#include <stdio.h>

struct B
{
public:
    B() {}
    // Delete the following line to resolve.
private:
    // copy constructor
    B(const B&) {}
};

void f(const B&)
{
}

int main()
{
    try
    {
        B aB;
        f(aB);
    }
    catch (B b)    // C2316
    {
        printf_s("Caught an exception!\n");
    }
}