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 サイトの他の関連記事を参照してください。