Rumah >pembangunan bahagian belakang >C++ >Mengapakah `std::make_unique` Tiada dalam C 11, dan Bagaimanakah Pemajuan Sempurna Berfungsi dalam Pelaksanaannya?

Mengapakah `std::make_unique` Tiada dalam C 11, dan Bagaimanakah Pemajuan Sempurna Berfungsi dalam Pelaksanaannya?

DDD
DDDasal
2024-12-30 00:30:12610semak imbas

Why is `std::make_unique` Missing in C  11, and How Does Perfect Forwarding Work in its Implementation?

Make_unique and Perfect Forwarding

S: Mengapakah fungsi make_unique terpusat hilang dalam perpustakaan standard C 11?

Ramai yang mendapati boilerplate pembinaan untuk petunjuk unik menyusahkan. Contohnya:

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

Fungsi anggun seperti ini akan diutamakan:

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

S: Berikut ialah percubaan pelaksanaan make_unique, tetapi sesuatu tentang std::forward kelihatan rosak. Apakah yang dilakukannya dan bagaimanakah ia sepatutnya digunakan?

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

J: Peninggalan std::make_unique dalam C 11 telah diakui sebagai kesilapan: ia telah ditambahkan dalam C 14.

Ungkapan std::forward(args) menggunakan pemajuan yang sempurna untuk menghasilkan tiruan merujuk kepada hujah ...args, membenarkannya dimajukan kepada ungkapan baharu dalam T(std::forward(args)...) dan menyatukan tingkah laku pembinaan untuk lvalues ​​dan rvalues.

Atas ialah kandungan terperinci Mengapakah `std::make_unique` Tiada dalam C 11, dan Bagaimanakah Pemajuan Sempurna Berfungsi dalam Pelaksanaannya?. 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