Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Parameter `unique_ptr` Dilalui dalam Pembina dan Fungsi C?

Bagaimanakah Parameter `unique_ptr` Dilalui dalam Pembina dan Fungsi C?

Barbara Streisand
Lepaskan: 2024-12-18 10:08:11
asal
219 orang telah melayarinya

How Should `unique_ptr` Parameters Be Passed in C   Constructors and Functions?

Cara Unik_ptr Parameter Perlu Dikendalikan dalam Pembina dan Fungsi

Senario

Pertimbangkan kelas Pangkalan merujuk dirinya sebagai berikut:

class Base {
public:
  typedef unique_ptr<Base> UPtr;

  Base() {}
  Base(Base::UPtr n) : next(std::move(n)) {}

  virtual ~Base() {}

  void setNext(Base::UPtr n) {
    next = std::move(n);
  }

protected:
  Base::UPtr next;
};
Salin selepas log masuk

Kaedah untuk Lulus Argumen unique_ptr

Untuk menggunakan parameter unique_ptr dengan berkesan, pertimbangkan kaedah berikut:

1. Mengikut Nilai (A)

Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
Salin selepas log masuk

Apabila dipanggil sebagai Base newBase(std::move(nextBase));, kaedah ini memindahkan pemilikan penuding kepada fungsi. Selepas pembinaan, nextBase menjadi kosong.

2. Dengan Rujukan bukan nilai l (B)

Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
Salin selepas log masuk

Ini memerlukan nilai l sebenar (pembolehubah dinamakan) dan membolehkan fungsi itu berpotensi menuntut pemilikan penunjuk.

3. Dengan const l-value Rujukan (C)

Base(std::unique_ptr<Base> const &n);
Salin selepas log masuk

Ini menghalang fungsi daripada menyimpan penunjuk, tetapi menjamin akses kepada objek untuk tempoh pelaksanaannya.

4. Dengan Rujukan r-value (D)

Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
Salin selepas log masuk

Serupa dengan (B), tetapi memerlukan penggunaan std::move apabila menghantar hujah bukan sementara. Fungsi ini mungkin atau mungkin tidak menuntut pemilikan.

Pengesyoran

  • Kaedah (A) hendaklah digunakan semasa memindahkan pemilikan kepada fungsi .
  • Kaedah (C) disyorkan untuk fungsi yang hanya menggunakan the unique_ptr untuk tempoh mereka.
  • Kaedah (D) harus dielakkan kerana kekaburannya mengenai pemindahan pemilikan.

Memanipulasi unique_ptr

Untuk mengalihkan unique_ptr, gunakan std::move. Ini mengelakkan penyalinan dan memastikan pemindahan hak milik yang betul.

Atas ialah kandungan terperinci Bagaimanakah Parameter `unique_ptr` Dilalui dalam Pembina dan Fungsi C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan