Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Fungsi `make_unique` Tersuai dalam C 11?

Bagaimana untuk Melaksanakan Fungsi `make_unique` Tersuai dalam C 11?

Linda Hamilton
Linda Hamiltonasal
2024-10-30 00:03:29684semak imbas

How to Implement a Custom `make_unique` Function in C  11?

Mencipta Pelaksanaan Tersuai make_unique dalam C 11

Fungsi make_unique ialah kaedah yang mudah untuk mencipta dan mengurus penunjuk unik dalam C . Ia membenarkan pengaturcara menghantar hujah terus kepada pembina objek runcing sambil memastikan pemilikan dipindahkan dengan betul. Walau bagaimanapun, sesetengah penyusun mungkin tidak menyokong make_unique secara asli. Dalam kes sedemikian, adalah perlu untuk melaksanakan versi tersuai bagi fungsi tersebut.

Fungsi make_unique tersuai

Untuk melaksanakan fungsi make_unique tersuai, anda boleh menggunakan coretan kod berikut:

template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}

Pelaksanaan tersuai ini menggunakan unique_ptr perpustakaan standard dan baharu untuk mencipta penunjuk unik. Ia memajukan hujah kepada pembina objek runcing menggunakan std::forward, memastikan pemindahan nilai yang betul.

Perbandingan dengan Pelaksanaan Asli

Fungsi make_unique tersuai beroperasi sama dengan versi asli. Walau bagaimanapun, ia mungkin mempunyai beberapa had dalam senario tertentu. Perlu diingat bahawa fungsi make_unique asli yang ditambahkan dalam C 14 menangani kes kelebihan tertentu dan pengoptimuman yang mungkin tidak terdapat dalam pelaksanaan tersuai.

Pelaksanaan Tersuai Alternatif

Pelaksanaan tersuai alternatif, yang menyediakan lebih fleksibiliti dan mengendalikan tatasusunan, boleh didapati dalam jawapan yang diterima oleh sasha.sochka pada Stack Overflow:

template <typename T>
std::unique_ptr<T> make_unique(T* ptr) {
  return std::unique_ptr<T>(ptr);
}

template <typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args) {
  return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}

Kesimpulan

Dengan menggunakan coretan kod yang disediakan, anda boleh melaksanakan adat fungsi make_unique dalam C 11. Walaupun pelaksanaan asli lebih disukai jika disokong oleh pengkompil anda, versi tersuai yang dibincangkan di sini menawarkan penyelesaian yang berdaya maju apabila perlu.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi `make_unique` Tersuai dalam C 11?. 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