Rumah >pembangunan bahagian belakang >C++ >Adakah Semakan `ini != &rhs` Diperlukan dalam Operator Tugasan Alih?

Adakah Semakan `ini != &rhs` Diperlukan dalam Operator Tugasan Alih?

Susan Sarandon
Susan Sarandonasal
2024-11-28 19:28:12582semak imbas

Is a `this != &rhs` Check Necessary in a Move Assignment Operator?

Alihkan Operator Tugasan dan ini != &rhs

Dalam pengendali tugasan standard untuk kelas, adalah amalan biasa untuk memasukkan ini != &rhs semak untuk mengelak mengubah suai objek pemanggilan apabila menetapkan kepada dirinya sendiri. Walau bagaimanapun, adakah semakan ini perlu dalam pengendali tugasan pindah?

Jawapan:

Pendapat berbeza-beza sama ada semakan ini != &rhs diperlukan dalam operator tugasan pindah. Ada yang berpendapat bahawa amalan yang baik untuk sentiasa memasukkannya, manakala yang lain percaya ia tidak perlu dan berpotensi memudaratkan.

Rasional:

  • Alasan untuk memasukkan semakan: Ia memastikan bahawa objek yang diberikan bukanlah objek yang memanggil itu sendiri, menghalang penugasan kendiri.
  • Sebab untuk meninggalkan cek: Dalam pengendali tugasan alih, objek yang memanggil, mengikut definisi, bukan merujuk kepada objek sebelah kanan (RHS). Oleh itu, semakan != &rhs ini sememangnya benar dan tidak perlu. Selain itu, jika RHS dan LHS ditukar secara tidak sengaja, semakan akan gagal, menyebabkan tingkah laku tidak ditentukan.

Kesimpulan:

Akhirnya, sama ada untuk memasukkan atau tidak the this != &rhs check in the move assignment operator is a matter of personal preference and context. Ia tidak diperlukan oleh standard C, tetapi sesetengah pembangun boleh memilih untuk memasukkannya untuk keselamatan tambahan atau untuk mengelakkan penugasan diri yang tidak disengajakan.

Atas ialah kandungan terperinci Adakah Semakan `ini != &rhs` Diperlukan dalam Operator Tugasan Alih?. 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