Kesahihan Objek Dipindah-Dari dalam C 11
Memahami kesahihan objek yang dialih-dari dalam C 11 boleh menjadi rumit. Artikel ini bertujuan untuk menjelaskan konsep, terutamanya dalam konteks objek pimpl.
Moved-From Objects
Apabila objek dialihkan, keadaannya menjadi tidak ditentukan. Pustaka standard mentakrifkan kriteria kesahihan untuk jenis perpustakaan standard, memastikan objek yang dialihkan daripada diletakkan dalam keadaan yang sah tetapi tidak ditentukan. Walau bagaimanapun, untuk jenis tersuai, adalah menjadi tanggungjawab pembangun untuk mentakrif dan mendokumentasikan keadaan sah dan operasi yang dibenarkan untuk dialihkan daripada objek.
Contoh: Pimpl Idiom
Dalam contoh idiom pimpl, ahli impl_ menunjuk kepada peruntukan dinamik. Selepas operasi bergerak, penunjuk dalam objek alih-dari ditetapkan kepada nullptr. Ini menjadikan kaedah do_stuff() tidak sah, kerana ia cuba menyahrujuk penuding impl_.
Invariant vs. Valid State
Invarian yang objek Foo sentiasa boleh lakukan_stuff () tidak lagi sah selepas dipindahkan dari. Secara amnya, objek alih-daripada mungkin tidak memenuhi semua invarian yang digunakan pada rakan sejawatannya yang tidak dialihkan.
Pilihan 1: Operasi Ditanda
Satu pilihan ialah menyemak secara eksplisit jika penunjuk impl_ adalah nullptr dalam do_stuff() dan mulakannya jika perlu. Walau bagaimanapun, ini memperkenalkan potensi overhed prestasi.
Pilihan 2: Tentukan Keadaan Tidak Sah
Sebagai alternatif, kod boleh menentukan secara eksplisit bahawa objek yang dialihkan daripada Foo berada dalam keadaan tidak sah nyatakan dan bahawa memanggil do_stuff() pada mereka akan menghasilkan a ralat.
Konsep dan Dipindah-Dari Objek
Adalah penting untuk ambil perhatian bahawa konsep yang ditakrifkan oleh perpustakaan standard tidak menganggap dialih-daripada objek. Untuk memenuhi keperluan konsep, pindah-daripada objek jenis tersuai mesti masih memenuhi keperluan konsep.
Kesimpulan
Memahami kesahihan objek pindah-daripada adalah penting untuk melaksanakan semantik bergerak dengan betul. Pembangun harus mempertimbangkan dengan teliti implikasi operasi bergerak pada keadaan objek mereka dan menentukan tingkah laku yang diharapkan dengan sewajarnya.
Atas ialah kandungan terperinci Apakah Kesahan dan Operasi yang Dibenarkan pada Objek Bergerak-Daripada dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!