C++中的局部静态对象

原创 2004年07月07日 22:15:00

一个简单的class T

class T
{
public:
  T()
  {
   value = 0x12345678;
  }
  ~T()
  {
   value = 0;
  }
  int value;
};

加上一个简单的foo函数,里面定义了一个静态局部对象:

void foo()
{
    static T t;
}

 

编译器展开后,实际上等同我们定义了

char tMemory[sizeof(T)];
int  tInit = 0;
void tFree()
{
   ((T*)tMemory)->~T();
}

void foo()
{
  if(!tInit)
  {
     tInit = 1;
     new (tMemory) T();
     atexit(tFree);
  }
}

 

C++之局部对象(自动对象和静态局部对象)

1、自动对象 默认情况下,局部变量的生命期局限于所在函数的每次执行期间。只有当定义它的函数被调用时才存在的对象称为自动对象。自动对象在每次调用函数时创建和撤销。该类型局部变量存储在栈上,在动态存储区...
  • Mary19920410
  • Mary19920410
  • 2017年04月14日 15:17
  • 657

C++之全局对象、局部对象、静态对象详解

1. 对于全局对象,程序一开始,其构造函数就先被执行(比程序进入点更早);程序即将结束前其析构函数将被执行。 2. 对于局部对象,当对象诞生时,其构造函数被执行;当程序流程将离开该对象的声明周期时,其...
  • Bruce_0712
  • Bruce_0712
  • 2017年02月22日 10:47
  • 2136

C++中的数组和局部静态对象

   正像以前我说过的,我已经不下五次“以为”我理解数组了,然而今天又一次发现自己无知。    初学C的时候我把数组当成指针看。明白了一些实现机制后,我开始把数组当成一个特殊的变量; 我开始察看汇编剖...
  • ox_thedarkness
  • ox_thedarkness
  • 2006年02月11日 23:26
  • 6647

C++构造与析构(18) - 静态对象(static object)何时销毁

C++的static关键字 static关键字可以用于修改局部变量,函数,类的数据成员以及对象。静态局部变量只初始化一次,然后在每次函数调用时都保持它的值。静态成员函数可以直接用类来调用,不需要创建对...
  • shltsh
  • shltsh
  • 2015年05月25日 01:20
  • 2315

局部静态对象

局部静态对象指的是函数内的static对象,首先我们看下面这段代码: class A{ public: A& get(){ static A a; return a; } };...
  • chen895281773
  • chen895281773
  • 2013年05月28日 14:41
  • 681

全局对象和全局静态、局部静态析构顺序

多久不用C++ ,好多東西都模糊了,最近跟人討論全局和靜態的析構順序,之前總覺得這個根據編譯器來決定的,其實還是有一定的說法的。 記錄一下:1. 全局与静态对象析构的顺序class A destru...
  • cartzhang
  • cartzhang
  • 2017年06月07日 21:49
  • 942

C/C++编程教训----函数内静态类对象初始化非线程安全(C++11之前)

不少程序员在编写程序的时候,会使用函数内静态(static)变量,既能满足函数内这个变量可以持久的记录某些信息,又使其访问范围的控制局限于函数内。但函数内静态类对象初始化是非线程安全的。问题背景在我们...
  • CJF_iceKing
  • CJF_iceKing
  • 2017年09月03日 16:57
  • 481

C++之局部static变量

static其他特性不多说,就说一点,当变量为局部static变量时,如果不知道它的特性你会欲哭无泪。今天在debug项目时就发现了这个坑。直接看两个例子吧。 #include using name...
  • u011108221
  • u011108221
  • 2015年04月15日 14:01
  • 1976

c++中对象动态建立与静态建立的区别和应用

C++中建立类的对象有两种方式: (1)静态建立,例如 A a;      静态建立一个类对象,就是由编译器为对象在栈空间中分配内存。使用这种方法,是直接调用类的构造函数。 (2)动态建立,例如...
  • Don_sandman
  • Don_sandman
  • 2017年09月21日 00:32
  • 176

c++ 静态对象 操作(static)

静态对象是一种从构造开始到程序结束都存在的一种对象.它是独立于栈与堆的。 静态存储 变量定义在函数外或是用static关键字修饰的变量存放在静态存储区.放在静态存储区的数据在整个程序运行其间持续有...
  • wpf_ml
  • wpf_ml
  • 2012年07月19日 15:43
  • 9422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中的局部静态对象
举报原因:
原因补充:

(最多只允许输入30个字)