Bilakah Pembina Alih dan Operator Tugasan Alih Dijana Secara Automatik dalam C 11?

Patricia Arquette
Lepaskan: 2024-11-27 05:26:18
asal
356 orang telah melayarinya

When Are Move Constructors and Move Assignment Operators Automatically Generated in C  11?

Penjanaan Automatik Operasi Alih

Dalam C 11, pengenalan semantik bergerak menimbulkan persoalan tentang keadaan di mana menggerakkan pembina dan memindahkan tugasan operator dijana secara automatik.

Di bawah C 11, operasi alih tidak secara automatik dihasilkan seperti pembina salinan dan pengendali tugasan salinan. Pengkompil hanya menjana semantik pindah jika syarat tertentu dipenuhi:

  • Tiada pembina salinan yang ditentukan pengguna atau pengendali tugasan salinan wujud. Jika salah satu daripada ahli ini ditakrifkan secara eksplisit, tiada pergerakan operasi dijana.
  • Tiada pemusnah yang ditentukan pengguna ditakrifkan. Mentakrifkan pemusnah melumpuhkan penjanaan semantik pindah.
  • Kelas tidak mempunyai ahli yang tidak boleh disalin. Operasi alih tidak dijana jika kelas mengandungi ahli yang tidak boleh dialihkan, seperti penunjuk ke memori yang diperuntukkan secara dinamik.

Memahami peraturan ini membantu membimbing pelaksanaan kelas yang menggunakan pergerakan semantik. Jadual daripada pembentangan Howard Hinnant memberikan gambaran ringkas tentang penjanaan automatik ahli khas, termasuk operasi pemindahan:

Declaration Copy Constructor Copy Assignment Operator Move Constructor & Move Assignment Operator
None Generated Generated Not Generated
Copy Constructor Not Generated Generated Not Generated
Copy Assignment Operator Not Generated Not Generated Not Generated
Move Constructor Not Generated Not Generated Not Generated
Move Assignment Operator Not Generated Not Generated Not Generated
Destructor Not Generated Not Generated Not Generated
Copy Constructor & Copy Assignment Operator Not Generated Not Generated Not Generated
Copy Constructor & Move Constructor Not Generated Not Generated Not Generated
Copy Constructor & Move Assignment Operator Not Generated Not Generated Not Generated
Copy Assignment Operator & Move Constructor Not Generated Not Generated Not Generated
Copy Assignment Operator & Move Assignment Operator Not Generated Not Generated Not Generated
Move Constructor & Destructor Not Generated Not Generated Not Generated
Move Assignment Operator & Destructor Not Generated Not Generated Not Generated
Copy Constructor & Copy Assignment Operator & Move Constructor Not Generated Not Generated Not Generated
Copy Constructor & Copy Assignment Operator & Move Assignment Operator Not Generated Not Generated Not Generated
Copy Constructor & Move Constructor & Move Assignment Operator Not Generated Not Generated Generated
Copy Assignment Operator & Move Constructor & Move Assignment Operator Not Generated Not Generated Generated

Dengan mengenali peraturan ini, pembangun boleh memastikan kelas mereka menggunakan semantik pergerakan dengan betul dan mencapai kecekapan optimum.

Atas ialah kandungan terperinci Bilakah Pembina Alih dan Operator Tugasan Alih Dijana Secara Automatik dalam C 11?. 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