make_unique 函數是在 C 中建立和管理唯一指標的便利方法。它允許程式設計師將參數直接傳遞給指向物件的建構函數,同時確保所有權正確轉移。但是,某些編譯器可能本身不支援 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中文網其他相關文章!