Rumah >pembangunan bahagian belakang >C++ >Patutkah Semakan `jika (ini != &rhs)` Disertakan dalam Operator Tugasan Alih?

Patutkah Semakan `jika (ini != &rhs)` Disertakan dalam Operator Tugasan Alih?

Patricia Arquette
Patricia Arquetteasal
2024-11-29 11:55:11656semak imbas

Should the `if (this != &rhs)` Check Be Included in a Move Assignment Operator?

Pindahkan Operator Tugasan dan jika (ini != &rhs)

Dalam pengendali tugasan kelas, ia adalah amalan biasa untuk menyemak sama ada objek yang diberikan ialah objek yang memanggil untuk mengelakkan kemungkinan ralat. Ini dilakukan menggunakan syarat jika (ini != &rhs).

Walau bagaimanapun, dalam konteks pengendali penugasan pindah, khususnya apabila bahagian sebelah kanan (RHS) ialah rujukan nilai (seperti Kelas&&), terdapat persoalan sama ada cek ini perlu.

Sesetengah berpendapat bahawa cek itu tidak diperlukan kerana rujukan nilai sentiasa merujuk kepada yang unik, objek sementara yang tidak boleh dialiaskan di tempat lain. Dalam kes ini, ini != &rhs sentiasa benar.

Yang lain berpendapat bahawa cek itu masih dinasihatkan sebagai langkah pertahanan, walaupun ia tidak diperlukan secara ketat oleh piawaian. Mereka menegaskan bahawa ia memberikan jaminan tambahan dan menghalang potensi pepijat atau tingkah laku yang tidak ditentukan jika kod pelanggan tersilap memberikan rujukan kendiri.

Konsensus umum nampaknya semakan tidak diperlukan dalam konteks pemindahan tugasan, tetapi ia juga tidak memudaratkan. Jika tugasan pindah dilaksanakan menggunakan simpulan bahasa Salin dan Tukar yang popular, adalah amalan biasa untuk memasukkan cek. Walau bagaimanapun, jika penugasan pindah dilaksanakan tanpa Salin dan Tukar, cek itu boleh ditinggalkan.

Akhirnya, keputusan sama ada untuk memasukkan cek itu atau tidak adalah soal keutamaan peribadi dan pertimbangan reka bentuk.

Atas ialah kandungan terperinci Patutkah Semakan `jika (ini != &rhs)` Disertakan 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