C 中的对象销毁
对象销毁:什么、何时以及如何
C ,对象可以大致分为 作用域对象 和动态对象。作用域对象的生命周期与其封闭范围(例如局部变量、全局变量、类实例)相关,而动态对象是使用指针创建和销毁的(例如 new、delete)。
作用域对象
-
自动对象:当控制流退出其范围(例如,函数退出、块结束)时,以创建的相反顺序销毁。
-
非本地静态对象: 在 main 之后以创建的相反顺序销毁() 执行。
-
本地静态对象: 当控制流进入其定义时构造第一次,并在 main() 执行后以相反的顺序销毁。
-
基类和成员子对象: 在对象的析构函数中以相反的顺序销毁,然后是其基类子对象。
-
数组元素: 按降序销毁
-
临时对象: 从纯右值表达式创建,在计算完整表达式时销毁。
动态对象
- 动态对象(新 Foo):通过显式调用delete p.
- 动态数组(new Foo[n]):通过显式调用delete[] p.
销毁异常处理
- 异常通过堆栈传播回来,对先前创建的自动对象调用析构函数。
- 析构函数永远不应该抛出异常。
- 如果在对象构造过程中发生异常,则在异常发生之前释放底层内存抛出。
手动对象销毁
由于C缺少垃圾回收器,动态对象必须手动释放,防止资源泄漏。
智能指针
-
引用计数智能指针(std::shared_ptr): 当引用它的最后一个 std::shared_ptr 被销毁时,自动销毁底层对象。
以上是C 中的对象销毁如何工作?的详细内容。更多信息请关注PHP中文网其他相关文章!