Penunjuk unik (unique_ptr) menegakkan prinsip pemilikan unik dalam C 11. Apabila berurusan dengan penunjuk unik sebagai hujah fungsi atau pembina, beberapa pilihan timbul dengan berbeza implikasi.
Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
Kaedah ini memindahkan pemilikan penunjuk unik kepada fungsi/objek. Kandungan penuding dialihkan ke dalam fungsi, meninggalkan penuding asal kosong selepas operasi.
Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
Membenarkan fungsi untuk mengakses dan berpotensi menuntut pemilikan penunjuk unik. Walau bagaimanapun, tingkah laku ini tidak dijamin dan memerlukan pemeriksaan pelaksanaan fungsi untuk menentukan pengendalian penudingnya.
Base(std::unique_ptr<Base> const &n);
Menghalang fungsi daripada menuntut pemilikan penunjuk unik. Penunjuk boleh diakses tetapi tidak disimpan atau diubah suai.
Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
Setanding dengan rujukan bukan const L-Value , tetapi memerlukan penggunaan std::move apabila menghantar hujah bukan sementara. pemilikan mungkin atau mungkin tidak dituntut oleh fungsi, menjadikannya kurang boleh diramalkan.
Untuk mengalihkan penuding unik, gunakan std::move. Menyalin penunjuk unik tidak dibenarkan:
std::unique_ptr<Base> newPtr(std::move(oldPtr));
Atas ialah kandungan terperinci Bagaimanakah Saya Harus Meluluskan Penunjuk Unik sebagai Fungsi atau Argumen Pembina dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!