cpp对象生命周期

内容简介

对象生命周期指对象从创建、可用,到销毁的全过程。C++ 的构造函数、析构函数、拷贝、移动、引用、指针都和生命周期有关。

理解生命周期后,悬挂引用、野指针、重复释放、浅拷贝等问题会更容易定位。

常见生命周期

对象位置创建时机销毁时机
局部对象执行到定义语句离开作用域
全局对象程序启动阶段程序结束阶段
静态局部对象第一次执行到定义处程序结束阶段
动态对象new 或智能指针创建delete 或所有者销毁
临时对象表达式求值时通常到完整表达式结束

示例

#include <string>
 
std::string make_name()
{
    std::string name = "Alice";
    return name;
}

name 是局部对象,但返回它是安全的。现代 C++ 通常会进行 RVO/NRVO,或者使用移动语义。

易错点

const std::string& bad()
{
    std::string name = "Alice";
    return name;  // 错误:返回局部对象引用
}

函数结束后 name 已经销毁,返回的引用会悬挂。

注意事项

  • 指针和引用不一定拥有对象,它们可能只是观察。
  • 对象销毁顺序通常和构造顺序相反。
  • 临时对象生命周期延长规则存在,但基础阶段不要依赖复杂规则写代码。

相关:cpp构造和析构函数cpp拷贝构造函数调用时机cppRVO与返回值优化