Chinaunix首页 | 论坛 | 博客
  • 博客访问: 444556
  • 博文数量: 138
  • 博客积分: 4114
  • 博客等级: 上校
  • 技术积分: 1341
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-14 20:41
文章分类

全部博文(138)

文章存档

2014年(1)

2013年(2)

2012年(78)

2011年(13)

2010年(34)

2009年(10)

我的朋友

分类: LINUX

2010-04-23 14:36:31

今天写一个单件模板的时候在 Instance 前面没有加static 结果报错,没有这个对象
SpecTemplate::Instance->getsomething();
//ps:instance中是这样的
{
   static  SpecTemplate  instance;
   return &instance;
}

报的错是没有这个对象,因为调用Instance的时候这个类还没有具现,所以就报没有这个对象的错误, 但是加上static就不一样了,这个是该类公有的,这样就可以调用了,在Instance内部会具现实际的类。

借由这个机会,好好看看c++有关static的东西。
以前学c语言的时候对static的理解是这样的:

static 变量
1>  当static变量为全局的时候,该变量的作用域是本文件内,也就是该编译单元;该变量的生命周期和整个进程的生命周期是一样的。
2>  当static变量为局部的时候,该变量的作用域是函数内的,但是这个变量不是存放在函数堆栈上的,是存放在进程的data段中,因此当函数的调用结束后这个变量仍然存在。且下次进入的时候该值仍是上次的值。这样看起来就像初始化了一次;

static 函数
   因为不能在函数里面再定义函数,所以函数只能是为文件级的,但是如果是static函数其作用域就只能是本文件内部,文件外的函数想调用这个函数的话是不可以的(没有自己测试过,-_-)。如果没有static修饰,就没有这个限制。

现在看c++,主要是把static放到类中,与原来的c语言不一样。

1>
class A_c
{
   static int a;
};
A_c::a = 0;

在类里面的仅仅是对a的一个声明,并没有定义,也就是没有给你空间,这样如果你直接去引用的话会出现一个错误的。
在外面没有static是因为,如果把它放到外面就和c语言的文件作用域的static有冲突。

2>
class B_c
{
   static const int a = 0;
};
这样是允许的,这是因为一个常量必须在声明的时候就得赋值,这个声明也是内存,因为必须得分配空间给它存放你赋给的值。

3>
class C_c
{
   static void u_function();
};
这样声明的函数表名这个函数是属于这个类的,你可以这样调用ta
C_c::u_function();它可以在没有对象的时候就调用,当然如果有了对象就更能调用了。

主要就是这样了,另外没有将static  与 const 等混合的写出来,等等有机会再写吧。希望对你有帮助。

阅读(567) | 评论(0) | 转发(0) |
0

上一篇:singleton练习

下一篇:消息处理的改进

给主人留下些什么吧!~~