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
Lepaskan: 2024-12-16 06:06:16
asal
709 orang telah melayarinya

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));
Salin selepas log masuk

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

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

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)...
Salin selepas log masuk

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 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan