Rumah >pembangunan bahagian belakang >C++ >Apakah Syarat Memastikan Kesahihan Objek Alih-Dari dalam C 11?
Keadaan Sah Objek "Dipindah Dari" dalam C 11
Soalan:
Dalam C 11, apabila objek dialihkan dari, ia memasuki keadaan yang tidak ditentukan. Apakah syarat yang harus dipenuhi oleh objek "dipindah dari" sedemikian untuk kekal sah?
Jawapan:
Kesahihan objek yang dialihkan daripada ditakrifkan oleh spesifikasi jenis dan dokumentasi.
Untuk jenis perpustakaan standard, objek yang dialihkan daripada diletakkan dalam keadaan yang tidak ditentukan tetapi sah, bermakna ia memenuhi semua keperluan standard untuk jenis, melainkan dinyatakan sebaliknya. Pengguna mesti menanyakan keadaan untuk menentukan operasi yang sah.
Untuk jenis yang ditakrifkan oleh pembangun, anda mentakrifkan dan mendokumentasikan perkara yang membentuk keadaan yang sah dan operasi yang dibenarkan untuk dialihkan daripada objek.
Dalam konteks contoh simpulan bahasa pimpl disediakan:
class Foo { std::unique_ptr<FooImpl> impl_; };
Anda boleh menentukan bahawa bergerak dari objek Foo membatalkan operasi do_stuff, menjadikannya tingkah laku tidak ditentukan. Ini adalah munasabah kerana pemindahan membayangkan tiada operasi lanjut boleh dilakukan pada objek yang dialihkan daripada.
Sebagai alternatif, anda boleh menentukan keadaan khusus untuk objek yang dialihkan daripada Foo, memastikan bahawa keperluan konsep perpustakaan standard adalah masih bertemu. Ini akan membolehkan anda menggunakan objek yang dialihkan daripada Foo dengan pustaka standard tanpa gelagat yang tidak ditentukan.
Perhatikan bahawa konsep perpustakaan standard tidak menganggap objek yang dialihkan daripada. Oleh itu, jika objek yang dialihkan daripada objek tidak kekal dalam keadaan sah mengikut konsep yang berkaitan, menggunakannya dengan perpustakaan standard akan menghasilkan tingkah laku yang tidak ditentukan.
Atas ialah kandungan terperinci Apakah Syarat Memastikan Kesahihan Objek Alih-Dari dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!