首頁 >後端開發 >C++ >為什麼 C 11 中缺少 `std::make_unique`,以及完美轉發在其實作中如何運作?

為什麼 C 11 中缺少 `std::make_unique`,以及完美轉發在其實作中如何運作?

DDD
DDD原創
2024-12-30 00:30:12585瀏覽

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

Make_unique 與完美轉送

問:為什麼 C 11 標準函式庫缺少集中式 make_unique 函式?

許多人找到了構造樣板unique指針不方便。例如:

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

像這樣的光滑函數將是首選:

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

問:這是一個make_unique 實現嘗試,但有關std::forward 的某些內容似乎已損壞。它在做什麼以及應該如何使用?

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

答:C 11 中 std::make_unique 的遺漏被認為是一個疏忽:它是在 C 14 中添加的。

std::forward(args) 表達式採用完美轉送來產生對參數...args 的人工引用,從而允許轉送它們到T(std::forward(args) ...) 中的新表達式並統一左值和右值的建構行為。

以上是為什麼 C 11 中缺少 `std::make_unique`,以及完美轉發在其實作中如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn