作用域式記憶體管理
建構函式和解構函式可讓您掌握物件的生命週期。
只要在物件中包裝指標,即可在物件刪除時釋放記憶體。即使發生例外狀況,編譯器仍會保證執行這項作業。
這通常稱為「資源取得即初始化」(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));