Visual Studio 2013 は次のコード スニペットをコンパイルしますエラーなし:
<code class="cpp">class A { public: A(){} A(A &&){} }; int main(int, char*) { A a; new A(a); return 0; }</code>
ただし、Visual Studio 2015 RC でエラー C2280 が発生します:
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
C 11 では、クラス定義が明示的に宣言されていない場合コピー コンストラクターの場合、コンパイラーは暗黙的にコピー コンストラクターを生成します。ただし、クラスが明示的なコピー コンストラクターを提供せずに移動コンストラクターまたは移動代入演算子を定義する場合、暗黙的なコピー コンストラクターは =delete として定義されます。これは、異なる基本クラスと派生クラス間でオブジェクトをコピーするときに意図しないスライスを防ぐ 5 つのルールを強制するためです。
C2280 エラーを解決するには、次の場合にコピー コンストラクターを明示的に宣言する必要があります。クラスをコピー可能にしたいとします。ここには 2 つのオプションがあります:
コピー コンストラクターを明示的に定義して削除します:
<code class="cpp">class A { public: explicit A(){} A(A &&){} A(const A&) = delete; };</code>
明示的にコピー コンストラクターを指定してデフォルトで指定します:
<code class="cpp">class A { public: explicit A(){} A(A &&){} A(const A&) = default; A& operator=(const A&) = default; };</code>
2 番目の方法では、移動代入演算子を明示的に指定し、ルールに従うデストラクターを宣言することも検討する必要があります。 5 つ中。
以上がVisual Studio でコンパイラ エラー C2280:「削除された関数を参照しようとしています」が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。