自动对象: 当封闭范围时,以与定义相反的顺序销毁结论是。
非局部静态对象: 在执行 main(全局变量、静态成员数据)后,以与定义相反的顺序销毁。
本地静态对象: 控制流第一次传递其定义时构造,并销毁执行 main 后按相反顺序(函数内的静态变量)。
以与定义相反的顺序销毁,首先是成员子对象,然后是基类子对象。
按降序销毁。如果在构造第 n 个元素期间发生异常,则首先析构元素 n-1 到 0。
在计算类类型的纯右值表达式时构造。当包含表达式完成求值时被销毁。如果在求值期间发生异常,临时对象将被正确销毁。
动态对象: 使用 new Foo 分配并使用 delete p 销毁.
动态数组: 分配新的 Foo[n] 并销毁with delete[] p.
在这两种情况下,尝试多次销毁内存、销毁后访问或使用不正确的销毁机制(例如,针对单个对象的 delete[])会导致未定义的行为。如果在构造过程中发生异常,则会在异常传播之前释放动态分配的内存。
std::shared_ptr
异常行为:
析构函数不应该抛出异常,因为这可能会终止程序。如果在对象销毁期间发生异常,则会传播该异常,并且所有先前被销毁的子对象都会被正确销毁。但是,如果动态对象在构造过程中发生异常,则会在异常传播之前释放内存,并且不会调用该对象的析构函数。
以上是C 中的对象是如何被销毁的?的详细内容。更多信息请关注PHP中文网其他相关文章!