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