Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Pembina Pindah dan Operator Tugasan Dijana Secara Tersirat dalam C?

Bagaimanakah Pembina Pindah dan Operator Tugasan Dijana Secara Tersirat dalam C?

Barbara Streisand
Barbara Streisandasal
2024-12-01 17:48:16605semak imbas

How Are Move Constructors and Assignment Operators Implicitly Generated in C  ?

Penjanaan Tersirat Operasi Perpindahan dalam C

Dalam draf awal piawaian C 11, terdapat perdebatan mengenai penjanaan perpindahan tersirat pembina dan pengendali tugasan. Ini disebabkan oleh kebimbangan tentang kemungkinan implikasi prestasi dan keinginan untuk memberikan lebih kawalan kepada pengaturcara ke atas operasi ini.

Spesifikasi Semasa

Spesifikasi semasa (N3225) menyatakan bahawa pembina alih dan pengendali tugasan akan secara tersirat diisytiharkan sebagai lalai jika:

  • kelas tidak mempunyai pembina salinan takrif pengguna
  • Kelas tidak mempunyai operator tugasan salinan takrif pengguna
  • Kelas tidak mempunyai pengendali tugasan alih takrif pengguna
  • Kelas tidak mempunyai pemusnah yang ditentukan pengguna
  • Pembina gerakan tidak akan ditakrifkan secara tersirat sebagai dipadamkan

Menangani Isu

Walaupun gelagat lalai telah berubah dari semasa ke semasa, terdapat beberapa cara untuk menangani kekurangan operasi pergerakan tersirat dalam penyusun lama:

  • Melaksanakan Move Constructors/Tugasan Secara Manual Operator: Ini adalah pendekatan yang paling mudah, tetapi ia memerlukan kod tambahan dan boleh terdedah kepada ralat jika tidak dilaksanakan dengan betul.
  • Gunakan Makro: Makro boleh digunakan untuk secara automatik menjana pembangun bergerak dan pengendali tugasan. Sebagai contoh, jawapan GManNickG menyediakan makro yang boleh digunakan untuk tujuan ini.
  • Pertimbangkan Pengkompil Mematuhi C 11: Jika boleh, naik taraf kepada pengkompil yang menyokong penjanaan tersirat operasi pemindahan mengikut spesifikasi C 11 semasa.

Tambahan Pertimbangan

Adalah penting untuk ambil perhatian bahawa melaksanakan semantik bergerak menghapuskan keperluan untuk fungsi ahli swap. Selain itu, pembina bergerak dan pengendali tugasan hanya boleh digunakan apabila kelas mengurus sumbernya sendiri, seperti memori yang diperuntukkan secara dinamik. Untuk kelas yang mengandungi jenis POD dan bekas STL semata-mata, semantik salinan lalai biasanya mencukupi.

Atas ialah kandungan terperinci Bagaimanakah Pembina Pindah dan Operator Tugasan Dijana Secara Tersirat dalam C?. 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