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.
Pertimbangkan coretan kod berikut:
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo"));
Direct std::shared_ptr Pembinaan:
std::make_shared Penggunaan:
Perbezaan utama terletak pada bilangan peruntukan timbunan yang diperlukan:
Peruntukan tunggal dalam make_shared ini menghapuskan keperluan untuk panggilan baharu yang jelas, menghasilkan peningkatan kecekapan.
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.
Seperti yang dinyatakan oleh Casey, potensi kelemahan berpunca daripada peruntukan tunggal:
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!