设为首页 加入收藏

TOP

C++ 静态成员变量 在类中的实现
2014-11-24 07:34:57 来源: 作者: 【 】 浏览:0
Tags:静态 成员 变量 实现

用法:


1、静态成员变量,在类中以static 标识,格式: static ;


2、静态成员变量需要在类外面初始化才能够使用。初始化不要在构造函数初始化,会破坏数据(看例子)。类外初始化会在全局数据区申请空间;类外只作了声明没有进行赋值的话,就会在bss区标记下来,待运行时系统会初始化为0。(至于,数据区,bss区的说明,请查看相关资料。)


3、无论创建几个类对象,静态变量在类中只保留一份,被多个对象共享,所以读取和写入时最好也有个静态的互斥锁把它锁住,再进行读写。


查看例子原码:cat main.cpp


例:


#include


#include


#include


class CIstatic{


public:


//****************down*****************


CIstatic()


{


m_fd[0] = -1;


m_fd[1] = -1; //危险的静态成员变量在构造函数初始化。


m_fd[2] = -1;


}


//*****************up*******************


void setVal()


{


m_fd_mutex.lock();


m_fd[0] = 1;


m_fd[1] = 2;


m_fd_mutex.unlock();


}


void printVal()


{


m_fd_mutex.lock();


printf("m_fd[0]:%d,m_fd[1]:%d,m_fd[2]:%d\n",m_fd[0],m_fd[1],m_fd[2]);


m_fd_mutex.unlock();


}


private:


static int m_fd[3];


static std::mutex m_fd_mutex;


};


int CIstatic::m_fd[3]; //类外声明,未初始化赋值。


std::mutex CIstatic::m_fd_mutex; //类外声明,未初始化赋值。


int main(int argc, const char *argv[])


{


CIstatic cStaticA;


cStaticA.setVal();


cStaticA.printVal();


sleep(1);


CIstatic cStaticB; //重新新建内对象。


cStaticB.printVal();


return 0;


}


编译:g++ -std=c++0x -o test.i386.elf main.cpp


运行结果:


1、未屏蔽构造函数前:


m_fd[0]:1,m_fd[1]:2,m_fd[2]:-1


m_fd[0]:-1,m_fd[1]:-1,m_fd[2]:-1


2、屏蔽构造函数后:


m_fd[0]:1,m_fd[1]:2,m_fd[2]:0


m_fd[0]:1,m_fd[1]:2,m_fd[2]:0


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenGL三维球体数据生成与绘制【.. 下一篇Android驱动使用JNI调用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis 分布式锁全解 (2025-12-25 17:19:51)
·SpringBoot 整合 Red (2025-12-25 17:19:48)
·MongoDB 索引 - 菜鸟 (2025-12-25 17:19:45)
·What Is Linux (2025-12-25 16:57:17)
·Linux小白必备:超全 (2025-12-25 16:57:14)