Rumah >pembangunan bahagian belakang >C++ >Sekiranya saya Lulus shared_ptrs melalui Rujukan atau mengikut Nilai dalam C ?

Sekiranya saya Lulus shared_ptrs melalui Rujukan atau mengikut Nilai dalam C ?

Susan Sarandon
Susan Sarandonasal
2024-11-02 14:39:02887semak imbas

Should I Pass shared_ptrs by Reference or by Value in C  ?

Melulus Shared_Ptrs: Rujukan vs. Nilai

Dalam C , apabila melepasi shared_ptr (sama ada pelaksanaan rangsangan atau C 11 STL), pembangun mempunyai pilihan untuk menyampaikannya melalui rujukan atau nilai. Timbul persoalan: pendekatan manakah yang lebih sesuai?

Kaedah Rujukan Const

Melalui rujukan const (void foo(const shared_ptr& p)) tidak mempunyai kelebihan prestasi berbanding lulus mengikut nilai. Salah tanggapan ini telah ditangani oleh tokoh C Scott Meyers, Andrei Alexandrescu dan Herb Sutter semasa sesi "Ask Us Anything" di C and Beyond 2011.

Melalui Kaedah Nilai

Melalui nilai (void foo(shared_ptr p)) biasanya lebih disukai kerana dua sebab:

  1. Tiada overhed yang tidak perlu: Melepasi nilai mengelakkan penciptaan rujukan sementara, yang sebaliknya akan memperkenalkan overhed yang tidak perlu.
  2. Ketekalan dengan semantik: Melewati nilai sejajar dengan semantik jenis kontena lain (mis., vektor, senarai), mengelakkan kekeliruan dalam amalan pengekodan .

Pendekatan Alternatif

Walau bagaimanapun, dalam senario tertentu di mana pemilikan perlu dikongsi, lulus mengikut nilai mungkin diperlukan. Contohnya, apabila memindahkan pemilikan antara struktur data atau benang, lulus mengikut nilai boleh memudahkan pemindahan pemilikan sambil memastikan pengurusan memori yang betul.

Kesimpulan

Secara umum, lulus rujukan shared_ptr oleh const tidak memberikan manfaat prestasi yang ketara dan tidak disyorkan. Melepasi nilai ialah pendekatan pilihan, memastikan konsistensi dan mengelakkan overhed yang tidak perlu.

Atas ialah kandungan terperinci Sekiranya saya Lulus shared_ptrs melalui Rujukan atau mengikut Nilai dalam C ?. 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