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
Lepaskan: 2024-12-30 00:30:12
asal
594 orang telah melayarinya

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));
Salin selepas log masuk

Fungsi anggun seperti ini akan diutamakan:

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

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)...));
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan