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
642 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!

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