作用域式記憶體管理

建構函式和解構函式可讓您掌握物件的生命週期。

只要在物件中包裝指標,即可在物件刪除時釋放記憶體。即使發生例外狀況,編譯器仍會保證執行這項作業。

這通常稱為「資源取得即初始化」(RAII),且會提供智慧指標。

C++ 範例

void say_hello(std::unique_ptr<Person> person) {
  std::cout << "Hello " << person->name << std::endl;
}
  • std::unique_ptr 物件會在堆疊上配置,並指向在堆積上配置的記憶體。
  • say_hello 結束時,std::unique_ptr 解構函式就會執行。
  • 解構函式會釋放其指向的 Person 物件。

將所有權傳遞至函式時,系統會使用特殊的移動建構函式:

std::unique_ptr<Person> person = find_person("Carla");
say_hello(std::move(person));