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

Susan Sarandon
Lepaskan: 2024-10-27 20:01:02
asal
347 orang telah melayarinya

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>
Salin selepas log masuk

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
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan