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

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

DDD
リリース: 2024-10-26 17:03:02
オリジナル
975 人が閲覧しました

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

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