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

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

Patricia Arquette
リリース: 2024-10-27 12:14:02
オリジナル
848 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート