C++程序里对象的构造、析构顺序和预期完全不符,随机出现资源提前释放或泄漏的问题,反复调试也摸不清调用规律。不用靠断点逐行追踪,理清基础规则就能完全掌控生命周期。

1. 局部对象栈自动管理
函数内定义的局部对象,进入作用域时自动调用构造函数。
出当前作用域的瞬间,立刻执行析构函数,生命周期完全被大括号限定,不会出现延后释放的情况。
2. 全局对象先于main执行
全局作用域定义的对象,会在main函数启动前完成构造。
程序退出时才统一执行析构,跨文件的全局对象构造顺序是未定义的,不要依赖不同文件全局对象的初始化先后逻辑。
3. 动态new对象手动控制
用new创建的堆对象,不会自动触发构造以外的行为。
只有执行delete语句时,才会立刻调用析构函数释放资源,忘记写delete就会造成内存泄漏,提前delete就会生成野指针。
4. 成员初始化按声明顺序
类的成员变量构造顺序,严格遵循类内的声明先后顺序。
和初始化列表的书写顺序无关,析构顺序则完全反过来,后构造的成员先执行析构,避免初始化顺序错位引发的异常。
本文凡亿教育原创文章,转载请注明来源!

扫码关注







































