首頁 >後端開發 >C++ >`std::make_unique` 如何在 C 中實現完美轉送?

`std::make_unique` 如何在 C 中實現完美轉送?

Patricia Arquette
Patricia Arquette原創
2024-12-26 02:40:09316瀏覽

How Does `std::make_unique` Achieve Perfect Forwarding in C  ?

make_unique 和完美轉送

在 C 11 中,沒有內建的 std::make_unique 函數,它允許簡潔地實例化唯一指標。開發人員發現語法

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

過於冗長,並提出了一種替代語法:

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

這種方法簡化了唯一指針的創建並減少了代碼重複。

std::make_unique 的建議實作透過 std::forward 採用完美轉送將參數傳遞給建構函式。完美轉發確保函數參數以最有效的方式傳遞,保留其原始類型和值類別(例如左值、右值)。

在make_unique 實作中,語法

std::forward<Args>(args)...

可以解釋如下:

  • std::forward: 類型推導出Args 的值類別(Args例如,左值或右值)的特徵。
  • args...:將變數參數擴展為單一參數。

在一起,它們實現了完美透過確保參數以正確的值類別和類型傳遞給建構函式來進行轉發。

Herb Sutter,C 主席標準化委員會已承認在 C 11 中未包括 std::make_unique 的監督,並表示將在未來版本中添加它。建議的實現與問題中提供的實現相同。

隨著 C 14 的引入,std::make_unique 得到了標準化,為創建唯一指標提供了所需的簡潔語法。

以上是`std::make_unique` 如何在 C 中實現完美轉送?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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