Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Patutkah saya Lulus `shared_ptr` mengikut Nilai atau Rujukan?

Patutkah saya Lulus `shared_ptr` mengikut Nilai atau Rujukan?

Barbara Streisand
Barbara Streisandasal
2024-10-31 14:24:02110semak imbas

Should I Pass `shared_ptr` by Value or by Reference?

Melalui Penunjuk Dikongsi: Mengikut Rujukan atau Mengikut Nilai

Apabila menghantar shared_ptr (dari boost atau C 11 STL) ke fungsi, pilihan antara menghantarnya melalui rujukan const (void foo(const shared_ptr& p)) atau mengikut nilai (void foo(shared_ptr p)) telah menjadi topik perdebatan.

Secara tradisinya, ia dipercayai bahawa lulus melalui rujukan akan menjadi lebih cepat kerana ia mengelakkan operasi penyalinan yang tidak perlu. Walau bagaimanapun, seperti yang dibincangkan oleh pakar di C and Beyond 2011 (Scott, Andrei, dan Herb), ini tidak lagi berlaku.

Adakah Anda Perlu Melewati Nilai atau Rujukan?

Melainkan terdapat keperluan eksplisit untuk berkongsi pemilikan objek (seperti antara struktur data atau urutan), tiada sebab yang kukuh untuk lulus shared_ptr mengikut nilai. Melewati rujukan const lebih disukai atas sebab berikut:

  • Prestasi: Melewati rujukan const biasanya lebih cepat daripada menyalin shared_ptr mengikut nilai, terutamanya untuk objek besar. Ini kerana hanya penuding itu sendiri yang dihantar, bukannya keseluruhan objek.
  • Ketepatan: Melewati rujukan const memastikan shared_ptr tidak boleh diubah suai dalam fungsi. Ini membantu mengelakkan perubahan yang tidak disengajakan pada objek kongsi.

Bila Perlu Melepasi Nilai

Satu-satunya masa yang dinasihatkan untuk lulus shared_ptr mengikut nilai ialah apabila niatnya adalah untuk memindahkan pemilikan objek kepada fungsi. Ini biasanya berlaku apabila fungsi perlu bertanggungjawab mengurus seumur hidup objek.

Pertimbangan Tambahan

Untuk prestasi optimum, adalah penting untuk mempertimbangkan sama ada shared_ptr boleh dioptimumkan bergerak. Seperti yang dijelaskan oleh Scott Meyers, pengoptimuman bergerak boleh menghapuskan keperluan untuk operasi penyalinan yang tidak perlu. Walau bagaimanapun, pengoptimuman ini hanya tersedia dalam versi C tertentu.

Atas ialah kandungan terperinci Patutkah saya Lulus `shared_ptr` mengikut Nilai atau Rujukan?. 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