Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah `std::make_unique` Mencapai Pemajuan Sempurna dalam C ?

Bagaimanakah `std::make_unique` Mencapai Pemajuan Sempurna dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-12-26 02:40:09316semak imbas

How Does `std::make_unique` Achieve Perfect Forwarding in C  ?

make_unique and Perfect Forwarding

Dalam C 11, tiada fungsi std::make_unique terbina dalam, yang akan membolehkan instantiasi ringkas penunjuk unik. Pembangun mendapati sintaks

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

bersifat tidak perlu dan mencadangkan sintaks alternatif:

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

Pendekatan ini memudahkan penciptaan penunjuk unik dan mengurangkan pertindihan kod.

Cadangan pelaksanaan std::make_unique menggunakan pemajuan sempurna melalui std::forward untuk lulus hujah kepada pembina. Pemajuan sempurna memastikan bahawa parameter fungsi diluluskan dengan cara yang paling cekap, mengekalkan jenis asal dan kategori nilainya (cth., lvalues, rvalues).

Dalam pelaksanaan make_unique, sintaks

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

boleh ditafsirkan sebagai berikut:

  • std::forward: Jenis ciri yang menyimpulkan kategori nilai (cth., lvalue atau rvalue) Args.
  • args...: Peluasan bagi argumen boleh ubah ke dalam parameter individu.

Bersama-sama, mereka mencapai pemajuan sempurna dengan memastikan hujah dihantar kepada pembina dengan kategori dan jenis nilai yang betul.

Herb Sutter, Pengerusi jawatankuasa penyeragaman C, telah mengakui pengawasan tidak memasukkan std::make_unique dalam C 11 dan telah menunjukkan bahawa ia akan ditambah dalam versi akan datang. Pelaksanaan yang dicadangkan adalah sama dengan yang disediakan dalam soalan.

Dengan pengenalan C 14, std::make_unique telah diseragamkan, menyediakan sintaks ringkas yang diminta untuk mencipta penunjuk unik.

Atas ialah kandungan terperinci Bagaimanakah `std::make_unique` Mencapai Pemajuan Sempurna dalam C ?. 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