Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Visual Studio 2015 Melaporkan Ralat C2280 \"Pembina Salinan Dipadam\" Semasa Mengumpul Kod Pembina Alih?

Mengapa Visual Studio 2015 Melaporkan Ralat C2280 \"Pembina Salinan Dipadam\" Semasa Mengumpul Kod Pembina Alih?

Susan Sarandon
Susan Sarandonasal
2024-10-27 20:01:02264semak imbas

Why Does Visual Studio 2015 Report Error C2280

Visual Studio 2015 Reports C2280: Meneroka Isu "Deleted Copy Constructor"

Dalam Visual Studio 2013, menyusun kod berikut dilaksanakan tanpa ralat :

<code class="cpp">class A {
public:
   A(){}
   A(A &&{}){};
};

int main(int, char*) {
   A a;
   new A(a);
   return 0;
}</code>

Walau bagaimanapun, selepas penyusunan dalam Visual Studio 2015 RC, pengkompil menimbulkan ralat C2280:

1> c:\dev\foo\foo.cpp(11): error C2280: 'A::A(const A &)'
: attempting to reference a deleted function

Punca Di Sebalik Ralat

Visual Studio 2015 berkelakuan berbeza daripada pendahulunya. Menurut piawaian C, jika definisi kelas mengisytiharkan pembina bergerak atau operator tugasan pindah, pengkompil secara tersirat menjana pembina salinan dan operator tugasan salinan sebagai dipadamkan. Ini adalah kes dalam coretan kod yang disediakan, di mana pembina bergerak hadir.

Mengatasi Masalah

Untuk menyelesaikan ralat penyusunan, pengisytiharan eksplisit salinan pembina dan operator tugasan salinan sebagai lalai adalah perlu:

<code class="cpp">class A {
public:
   A(){}
   A(A &&{}){};
   A(const A&{}) = default;
};</code>

Dengan pengubahsuaian ini, pengkompil akan menjana pembina salinan yang diperlukan dan operator tugasan salinan tanpa menandakannya sebagai dipadamkan.

Pertimbangan Tambahan

Jika kelas mentakrifkan semantik pindah, secara amnya disyorkan untuk turut mentakrifkan pengendali tugasan pindah dan pemusnah. Mengikuti prinsip "Peraturan Lima" boleh membantu memastikan pengurusan sumber yang betul.

Atas ialah kandungan terperinci Mengapa Visual Studio 2015 Melaporkan Ralat C2280 \"Pembina Salinan Dipadam\" Semasa Mengumpul Kod Pembina Alih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn