基于作用域的内存管理
构造函数和析构函数让你可以钩入对象的生命周期。
通过将指针封装在对象中,你可以在该对象 被销毁时释放内存。编译器可保证这一点的实现,即使引发了异常也不例外。
这通常称为“资源获取即初始化 (resource acquisition is initialization, 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
对象。
将所有权传递给函数时,使用特殊的 move 构造函数:
std::unique_ptr<Person> person = find_person("Carla");
say_hello(std::move(person));