Rumah >pembangunan bahagian belakang >C++ >Adakah Kita Memerlukan Operator Tugasan C Move `jika (ini != &rhs)` Daftar masuk?
Pindahkan Operator Tugasan dan jika (ini != &rhs)
Dalam pengendali tugasan salinan kelas, ia adalah amalan biasa untuk menyemak sama ada objek yang diberikan ialah objek yang memanggil untuk menghalang penugasan diri:
Class& Class::operator=(const Class& rhs) { if (this != &rhs) { // Do the assignment } return *this; }
Semakan ini ialah penting untuk mengelakkan objek daripada ditugaskan kepada dirinya sendiri, yang boleh membawa kepada tingkah laku atau ralat yang tidak dijangka. Walau bagaimanapun, dalam kes pengendali penugasan pindah, keperluan cek ini boleh dipertikaikan.
Adakah kita memerlukan cek yang sama untuk pengendali tugasan pindah?
Class& Class::operator=(Class&& rhs) { if (this != &rhs) { // Do the assignment } return *this; }
Timbul persoalan sama ada terdapat situasi di mana == &rhs ini benar untuk operator penugasan pindah. Jawapannya bergantung pada tafsiran pengendali tugasan pindah.
Tafsiran pengendali tugasan pindah:
Terdapat dua tafsiran utama pengendali tugasan pindah:
Standard semasa dan akan datang:
C 11 standard tidak secara eksplisit mewajibkan tafsiran khusus bagi pengendali tugasan pindah. Walau bagaimanapun, ia membenarkan pengaturcara mentakrifkan gelagat melalui pelaksanaan pengendali penugasan pindah.
Draf kerja C 20 yang dicadangkan termasuk bahagian tugasan alih yang mencadangkan bahawa penugasan bergerak sendiri tidak boleh ranap, tetapi ia tidak menyatakan sama ada ia harus mengekalkan nilai semasa atau meninggalkan objek dalam sah tetapi tidak ditentukan nyatakan.
Kesimpulan:
Keperluan untuk semakan if (ini != &rhs) dalam operator penugasan pindah adalah soal tafsiran dan keperluan pelaksanaan khusus. Jika penugasan bergerak sendiri dijangka mengekalkan nilai semasa, maka semakan adalah perlu. Jika tidak, ia boleh diabaikan sebagai pengoptimuman.
Atas ialah kandungan terperinci Adakah Kita Memerlukan Operator Tugasan C Move `jika (ini != &rhs)` Daftar masuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!