Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan `make_unique` dalam C 11 Apabila Pengkompil Anda Tidak Menyokongnya?

Bagaimana untuk Melaksanakan `make_unique` dalam C 11 Apabila Pengkompil Anda Tidak Menyokongnya?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 10:25:02659semak imbas

How to Implement `make_unique` in C  11 When Your Compiler Doesn't Support It?

Mencipta semula Fungsi make_unique dalam C 11

Piawaian C 11 memperkenalkan fungsi berkuasa, make_unique, untuk mencipta penunjuk unik. Walau bagaimanapun, sesetengah mungkin menghadapi isu pengkompil mereka tidak menyokong fungsi ini. Artikel ini menyediakan penyelesaian untuk melaksanakan make_unique dalam C 11.

Mengikut soalan, prototaip fungsi make_unique ialah:

<code class="cpp">template< class T, class... Args > unique_ptr<T> make_unique( Args&&&... args );</code>

Kod berikut menyediakan pelaksanaan make_unique:

<code class="cpp">template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}</code>

Pelaksanaan ini menggunakan std::forward<> fungsi untuk memastikan bahawa pemajuan hujah berlaku dengan betul untuk semua jenis argumen, termasuk rujukan dan rujukan nilai.

Perhatikan bahawa jika pengkompil anda menyokong C 11 tetapi bukan fungsi make_unique, anda masih boleh menggunakan pelaksanaan ini sebagai penyelesaian. Sebagai alternatif, jika anda mempunyai akses kepada pengkompil yang menyokong C 14 atau lebih baru, anda boleh memanfaatkan fungsi std::make_unique standard untuk tujuan ini.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan `make_unique` dalam C 11 Apabila Pengkompil Anda Tidak Menyokongnya?. 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