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