ホームページ  >  記事  >  バックエンド開発  >  C コンパイラ エラー C2280「削除された関数を参照しようとしています」が Visual Studio 2015 では発生するのに、2013 では発生しないのはなぜですか?

C コンパイラ エラー C2280「削除された関数を参照しようとしています」が Visual Studio 2015 では発生するのに、2013 では発生しないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-27 12:14:02743ブラウズ

Why Does C   Compiler Error C2280

Visual Studio 2013 および 2015 の C コンパイラ エラー C2280 "削除された関数を参照しようとしています"

Visual Studio 2013 では、次のコードスニペットはエラーなしでコンパイルされます:

class A
{
public:
   A(){}
   A(A &&){}
};

int main(int, char*)
{
   A a;
   new A(a);
   return 0;
}

ただし、同じコード スニペットは Visual Studio 2015 でエラーを生成します:

1>------ Build started: Project: foo, Configuration: Debug Win32 ------
1>  foo.cpp
1>c:\dev\foo\foo.cpp(11): error C2280: 'A::A(const A &)': attempting to reference a deleted function
1>  c:\dev\foo\foo.cpp(6): note: compiler has generated 'A::A' here
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

これは、C 標準では、クラスが移動コンストラクターまたは移動代入演算子を使用すると、暗黙的に宣言されたコピー コンストラクターは削除済みとして定義されます。

この問題を解決するには、コピー コンストラクターとコピー代入演算子を明示的に指定できます。

class A
{
public:
   A(){}
   A(A &&){}
   A(const A&) = default;
   A& operator=(const A&) = default;
};

これこれにより、クラス A のオブジェクトのコピー構築とコピー割り当てが可能になります。

以上がC コンパイラ エラー C2280「削除された関数を参照しようとしています」が Visual Studio 2015 では発生するのに、2013 では発生しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。