C++11中的五法則是什麼?


五法則應用於C++的資源管理。資源管理使客戶端無需擔心被管理物件的生存期,從而潛在地消除C++程式碼中的記憶體洩漏和其他問題。但是這種管理是有代價的。五大法則指出,如果你必須編寫以下函式之一,那麼你必須為所有這些函式制定策略。如果我們有一個物件Foo,那麼我們可以有一個FooManager來處理資源Foo。在實現FooManager時,你可能需要實現以下所有函式:

  • 解構函式 - 當此管理器超出範圍時,它應該釋放所有正在管理的資源。

  • 賦值運算子 - 如果你不提供一個,編譯器將建立一個預設的賦值運算子。預設的賦值操作是一個逐成員複製函式,它執行淺複製而不是深複製。這可能會導致記憶體洩漏、錯誤賦值等問題。

  • 複製建構函式 - 編譯器提供的複製建構函式會逐成員複製FooManager的所有屬性。這會帶來與賦值運算子相同的問題。

  • 移動建構函式 - 複製物件可能很昂貴,因為它涉及建立、複製然後銷燬臨時物件。C++11引入了右值引用的概念。右值引用可以顯式繫結到右值。右值是一個未命名的物件,換句話說,就是一個臨時物件。這個右值引用可以用於建構函式,以建立一個對傳遞給它的右值的引用。

  • 移動賦值運算子 - 一次只擁有一個資源非常有用。此資源的所有權可以從一個管理器轉移到另一個管理器。在這種情況下,你可以提供一個移動賦值運算子。

這是一個學習五法則的好資源 - https://www.feabhas.com/sites/default/files/2016-06/Rule%20of%20the%20Big%20Five.pdf.

更新於:2020年6月24日

瀏覽量:596

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告