Rumah > pembangunan bahagian belakang > C++ > `std::make_shared` lwn. `std::shared_ptr`: Manakah Lebih Cekap?

`std::make_shared` lwn. `std::shared_ptr`: Manakah Lebih Cekap?

Barbara Streisand
Lepaskan: 2024-12-14 02:04:10
asal
738 orang telah melayarinya

`std::make_shared` vs. `std::shared_ptr`: Which is More Efficient?

Membezakan Kecekapan std::make_shared vs. Direct std::shared_ptr Penggunaan

Memahami perbezaan kecekapan antara std::make_shared dan membina secara langsung std: :shared_ptr boleh menjadi tugas yang membingungkan. Di sini, kami menyelidiki perbandingan terperinci untuk menjelaskan kerumitan setiap kaedah.

Meneroka Urutan Pembinaan

Pertimbangkan coretan kod berikut:

std::shared_ptr<Object> p1 = std::make_shared<Object>("foo");
std::shared_ptr<Object> p2(new Object("foo"));
Salin selepas log masuk

Direct std::shared_ptr Pembinaan:

  1. Peruntukan timbunan untuk Objek
  2. Pembina penuding dikongsi, memperuntukkan rantau timbunan lain untuk metadata

std::make_shared Penggunaan:

  1. Timbunan gabungan peruntukan, merangkumi kedua-dua Objek dan metadata

Menyatakan Keuntungan Kecekapan

Perbezaan utama terletak pada bilangan peruntukan timbunan yang diperlukan:

  • make_shared: 1 peruntukan
  • Terus shared_ptr: 2 peruntukan

Peruntukan tunggal dalam make_shared ini menghapuskan keperluan untuk panggilan baharu yang jelas, menghasilkan peningkatan kecekapan.

Pertimbangan Pengecualian

Pra-C 17:
Pengendalian pengecualian sebelum ini boleh mendatangkan malapetaka, kerana penunjuk mentah mungkin tidak dihantar dengan selamat kepada pembina shared_ptr.

C 17 dan Kemudian:
Isu ini telah diselesaikan terima kasih kepada perubahan dalam susunan penilaian argumen fungsi. Hari ini, pengecualian dikendalikan dengan baik, memastikan integriti ingatan.

Kelemahan Kecil std::make_shared

Seperti yang dinyatakan oleh Casey, potensi kelemahan berpunca daripada peruntukan tunggal:

  • Memori terkawal tidak boleh dilepaskan sehingga blok kawalan tidak lagi digunakan, berpotensi memanjangkan pengekalan ingatan kerana rujukan penunjuk yang lemah.

Atas ialah kandungan terperinci `std::make_shared` lwn. `std::shared_ptr`: Manakah Lebih Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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