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

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

DDD
DDDオリジナル
2024-10-26 17:03:02847ブラウズ

Why Am I Getting Compiler Error C2280

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

Visual Studio 2015 コンパイラは、2013 年以前のコンパイラとは異なり、移動コンストラクターまたは移動代入演算子を定義するクラスに対して、削除されたコピー コンストラクターを自動的に生成します。この動作は、移動が優先される状況での誤ったコピーを防ぐために C 標準で義務付けられています。

コード スニペットでは、クラス A に移動コンストラクター A(A &&) があり、これは削除されたコピーを意味します。標準に従ってコンストラクターを作成します。その結果、メインの新しい A(a) 式によってエラー C2280 が発生します。

この問題を解決するには、A:

<code class="cpp">class A {
public:
   A() {}
   A(A &&) {}
   A(const A&) = default; // Explicitly declare the copy constructor as defaulted
};</code>

でコピー コンストラクターを明示的に宣言することもできます。コピーを無効にして移動のみを許可する場合は、コピー コンストラクターとコピー代入演算子を削除済みとして宣言できます。

<code class="cpp">class A {
public:
   A() {}
   A(A &&) {}
   A(const A&) = delete;
   A& operator=(const A&) = delete; // Delete copy assignment operator
};</code>

コピーを無効にする場合は、移動代入演算子も宣言する必要があることに注意してください。 5 つのルールに準拠するためのデストラクター。

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

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