Rumah >pembangunan bahagian belakang >C++ >Mengapakah `std::make_unique` merupakan tambahan yang berharga kepada C walaupun kerumitannya?

Mengapakah `std::make_unique` merupakan tambahan yang berharga kepada C walaupun kerumitannya?

DDD
DDDasal
2024-12-16 06:06:16633semak imbas

Why is `std::make_unique` a valuable addition to C   despite its complexity?

std::make_unique: Kemudahan Perpustakaan Standard yang Hilang

Pustaka standard C 11 tidak mempunyai templat fungsi std::make_unique, meninggalkan pembangun menulis kod verbose untuk mencipta petunjuk unik. Pertimbangkan contoh berikut:

std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));

Untuk mengurangkan keterlaluan ini, sesetengah pembangun telah mencadangkan fungsi make_unique:

auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);

Sintaks ini menyembunyikan pengendali baharu dan menyebut jenisnya sekali sahaja.

Walau bagaimanapun, melaksanakan fungsi sedemikian memerlukan pemahaman selok-belok pemajuan yang sempurna. Khususnya, ungkapan std::forward:

std::forward<Args>(args)...

melibatkan operasi berikut:

  • std::forward ialah ungkapan transformasi jenis yang memajukan sebarang rujukan lvalue atau rvalue Args kepada hasilnya.
  • std::forward(args) ialah ungkapan panggilan fungsi yang menyimpulkan dan membina Args dengan memajukan argumen yang sepadan dalam args.
  • ... membongkar hujah yang dimajukan ke dalam parameter pek.

Ringkasnya, std::forward<Args>(args)... membenarkan pemajuan argumen yang sempurna kepada pembina.

Atas ialah kandungan terperinci Mengapakah `std::make_unique` merupakan tambahan yang berharga kepada C walaupun kerumitannya?. 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