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++程序的生与死,C++中的四种对象(全局对象、局部对象、静态(static)对象、以new方式产生出来的局部对象),以及在C++中有四种方法可以产生一个对象

  • 2009年04月03日 13:31
  • 36KB
  • 下载

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

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

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

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

C++----局部静态对象和函数

局部静态对象某些时候,有必要令局部变量的生命周期贯穿函数调用之后的时间。可以将局部变量定义成static类型从而获得这样的对象。局部静态对象(local static object)在程序的执行路径第...
  • Love_wanling
  • Love_wanling
  • 2017-05-24 15:59:01
  • 307

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

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

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

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

C++之全局对象,局部对象,静态局部对象

先说两个概念:作用域(scope) 和生命周期(lifetime) 作用域: 名字的作用域指的是知道该名字的程序文本区域 生命周期:对象的生命周期指在程序执行过程中对象存在的时间 全局对象, 顾名...
  • xiaoyaohuqijun
  • xiaoyaohuqijun
  • 2015-09-27 20:05:25
  • 575

局部对象,static局部对象,static全局对象

为分清这些,我们先看一段代码:#include static int global_sta = 1; //global_sta为静态全局对象 void print() { int non_l...
  • capecape
  • capecape
  • 2017-09-22 10:25:36
  • 215

关于C++函数返回局部对象的详细分析

以前一直挺好奇的,C++是怎么在函数内返回一个局部对象的。因为按照我之前的想法,函数返回一个基本类型的值是通过存放到ecx实现的(关于浮点不了解),但是局部对象又是比较大的,很明显不能使用寄存器作为通...
  • u013524455
  • u013524455
  • 2017-04-06 23:55:26
  • 780

static 类型属性(局部静态对象)

最近在使用static对象时,发现static对象只执行一次初始化。此类型对象被存储在特定的内存块中,随着程序的结束消亡。这种对象可用来记录函数调用次数。...
  • jiu23
  • jiu23
  • 2007-08-18 19:35:00
  • 272
收藏助手
不良信息举报
您举报文章:C++中的局部静态对象
举报原因:
原因补充:

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