读书笔记《深度探索c++对象模型》(6) - 执行期语意
一、对象的构造与析构 因声明定义一个类对象,若需要构造或析构函数时,其构造函数和析构函数将被编译器插入到代码中的合适位置,然而因为需要对析构函数的正确且合理的位置调用,可能会出现多个可能的位置插入析构函数的调用代码,如不同处的 return , goto 语句、 {}代码段结束位置等复杂场景中,故建议定义一个类对象时最好放置在需要使用的地方且防止可能在多处插入析构函数的情况,如可用{}早点儿结束析构操作,即最好不要将类对象声明定义在最开始处。 全局对象, C++ 全局对象均放置在数据段中,且被初始化为给定的初值或默认值为 0 ;故而一般情况下全局对象在进入 main 函数前已被初始化,而 main 函数结束时把其析构释放掉;故而需要编译器提供必要的静态初始化的支持,即全局对象的静态初始化以及对应的析构释放。 全局对象应需要被静态初始化,其不能被放置在 try 区段内,对静态调用的构造函数可能会抛异常时将引发 terminate 函数调用;另外便是需要控制跨模块做静态初始化的对象的依赖顺序产生的问题和复杂度,建议不要用需要做静态初始化的全局对象。 局部静态对象,需要保证其所在函数被调用多次时,始终仅调用一次构造函数和析构函数,需要编译器来支持实现,插入必要的初始化一次和析构一次的临时保护代码,不同编译器有不同的实现方式(可能通过插入另外一个全局静态的一个对象