首頁 >後端開發 >C++ >如何在 C 11 中實作自訂 `make_unique` 函數?

如何在 C 11 中實作自訂 `make_unique` 函數?

Linda Hamilton
Linda Hamilton原創
2024-10-30 00:03:29764瀏覽

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

在 C 11 中建立 make_unique 的自訂實作

make_unique 函數是在 C 中建立和管理唯一指標的便利方法。它允許程式設計師將參數直接傳遞給指向物件的建構函數,同時確保所有權正確轉移。但是,某些編譯器可能本身不支援 make_unique。在這種情況下,有必要實作該函數的自訂版本。

自訂make_unique 函數

要實作自訂make_unique 函數,您可以使用下列程式碼片段:

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

此自訂實作利用標準函式庫的使用尺寸來創建唯一指針。它使用 std::forward 將參數轉送給指向物件的建構函數,確保正確的值傳輸。

與本機實現的比較

自訂 make_unique 函數的操作與本機版本類似。但在特定場景下可能存在一定的限制。值得注意的是,C 14 中新增的原生 make_unique 函數解決了自訂實作中可能不存在的某些邊緣情況和最佳化。

替代自訂實作

替代自訂實現,其中提供更多的多功能性並處理數組,可以在Stack Overflow 上sasha.sochka 接受的答案中找到:

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)...));
}

結論

利用提供的程式碼片段,您可以實現自訂C 11 中的make_unique 函數。雖然如果您的編譯器支援的話,本機實作是更好的選擇,但此處討論的自訂版本在必要時提供了可行的解決方案。

以上是如何在 C 11 中實作自訂 `make_unique` 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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