Mengapa Kesatuan Tidak Membenarkan Objek dengan Pembina Salinan Bukan remeh
Dalam C , kesatuan ialah struktur data yang memperuntukkan satu ruang memori untuk data yang berbeza jenis. Reka bentuk ini membolehkan penggunaan memori yang cekap apabila bekerja dengan bilangan nilai terhad yang mempunyai jenis yang berbeza tetapi menduduki saiz storan yang sama. Walau bagaimanapun, kesatuan mengenakan sekatan tertentu untuk memastikan integriti data dan mengelakkan kerosakan memori.
Salah satu sekatan ini melibatkan objek dengan pembina salinan bukan remeh, seperti std::string. Pembina salinan bukan remeh ialah yang menjalankan operasi tambahan selain daripada menyalin data dari satu objek ke objek lain, seperti memperuntukkan memori baharu untuk objek yang disalin.
Dalam kesatuan, ini menjadi bermasalah kerana memori yang diperuntukkan dikongsi di kalangan semua ahli kesatuan. Jika seorang ahli dengan pembina salinan bukan remeh dimulakan, ia mungkin mengganggu data ahli lain, yang berpotensi membawa kepada tingkah laku yang tidak ditentukan.
Pertimbangkan contoh kesatuan dengan integer i, apungan f dan a string s:
union U { int i; float f; std::string s; };
Jika s dimulakan menggunakan pembina salinan bukan remeh, ia memerlukan peruntukan memori tambahan. Walau bagaimanapun, peruntukan ini akan menjejaskan ruang memori yang diperuntukkan untuk i dan f, yang membawa kepada kerosakan data.
Untuk memastikan integriti data dan mengelakkan isu ini, piawaian C melarang penggunaan objek dengan pembina salinan bukan remeh dalam kesatuan sekerja. Sekatan ini memastikan bahawa semua ahli kesatuan menduduki saiz storan yang sama dan tiada kesamaran tentang ahli mana yang secara aktif menggunakan ruang kesatuan.
Walaupun mungkin mudah untuk menyimpan objek seperti std::string dalam kesatuan, penyelesaian alternatif tersedia yang boleh mengendalikan jenis data ini tanpa melanggar sekatan yang dikenakan oleh kesatuan. Penyelesaian ini melibatkan penggunaan kesatuan berteg atau perpustakaan utiliti yang menyediakan pelaksanaan untuk mengendalikan objek dengan pembina salinan bukan remeh dengan cara yang selamat dan cekap.
Atas ialah kandungan terperinci Mengapa Objek dengan Pembina Salinan Bukan Trivial Tidak Boleh Menjadi Ahli Kesatuan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!