Post

对象的生命周期

对象的生命周期
从对象的构造函数完成的那一刻开始,直到析构函数执行为止。对于那些没有声明构造函数的类型,比如 int,我们可以认为他们拥有默认的构造函数和析构函数,并且这两个函数不执行任何操作。
自动对象
除非程序员特别说明,否则在函数中生命的对象在其定义处被创建,当超出作用域范围时被销毁。在大多数实现中,自动对象被分配在空间上。 每调用一次函数,获取新的栈帧以存放他的自动对象。
静态对象
在全局作用域或名字空间作用域中声明的对象以及在函数或类中声明的 static 成员只被创建并初始化一次,并且到程序结束之前都存活。 静态对象在程序的整个执行周期内地址唯一。

在多线程环境中,静态对象可能会造成某些意料之外的问题。因为所有线程共享静态对象。所以必须为其加锁避免数据竞争。

自由存储对象
newdelete 直接控制其生命周期的对象。
临时对象
比如计算的中间结果或用于存放 const 实参引用的值的对象。临时对象的生命周期由其用法决定。如果临时对象被绑定到一个引用上,则他的生命周期就是引用的生命周期。 否则,临时对象的生命周期与他所处的完整表达式一致。通常情况下,临时对象也是自动对象。
线程局部对象
随着线程的创建而创建,随着线程的销毁而销毁。

数组元素和非静态类成员的由他们所属的对象决定。

This post is licensed under CC BY 4.0 by the author.