簡體   English   中英

現代c ++中的獨特指針

[英]Unique Pointers in Modern c++

我在整個網絡上搜索了很多,並在現代c ++中找到了很多不同的unique_ptr實現示例。 我已經開始將所有以::iterators開頭的代碼更新到auto等等。但是,使用智能指針我不認為我完全理解我想要做的事情。

使用標准指針,我有:

 object *temp = new object();

然后使用新的智能指針我:

  unquie_ptr<object> temp(new object());

這不是正確的實施方式嗎? 如果是這樣的話,當我在程序結束時構建一個簡單的清理函數時,似乎更多的輸入/工作來制作智能指針?

您可以使用更高性能的std::make_uniquestd::make_shared

但是, make_unique在C ++ 11中不可用,但在C ++ 14及更高版本中

所以

std::unique_ptr<object> = std::make_unique<object>();

要么

auto p = std::make_unique<object>();

shared_ptr類似的東西。

在C ++ 11中,您可以將表達式用於unique_ptr

unquie_ptr<object> temp(new object());

您可能應該使用make_unique而不是直接調用構造函數來完全刪除newdelete

auto p = std::make_unique<object>();

如果是這樣的話,當我在程序結束時構建一個簡單的清理函數時,似乎更多的輸入/工作來制作智能指針?

隨着你的程序變得越來越大你忘記delete你用new創建的東西的幾率會變得越來越大,這就是為什么unique_ptr可以幫助你。 請記住,編寫較少的代碼行並不意味着代碼更好。

智能指針是RAII(資源分配是初始化)容器,它保證在對象超出范圍時釋放所包含的資源。 考慮具有多個退出點的函數或在函數內部某處拋出異常的情況。 如果通過顯式調用專用函數執行清理,則必須在每個出口點仔細調用該函數。 此外,為了確保在拋出異常時資源不會泄漏,還必須在異常處理程序中調用該清理函數(更不用說需要顯式處理異常)。 使用智能指針,如果調用異常,資源將不會泄漏,因為當堆棧展開並且對象超出范圍時,它們將自動處理。

智能指針創建了一個干凈的抽象,將凌亂的資源管理隔離到較低的水平,並確保資源不會無意中泄露。

與保證用原始指針類似地管理資源所需的附加代碼相比,初始化語法開銷是最小的。

智能指針使C ++代碼更安全,更小,更易於維護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM