C++ 静态成员变量 在类中的达成
发布时间:2021-11-21 18:48:39 所属栏目:PHP教程 来源:互联网
导读:用法: 1、静态成员变量,在类中以static 标识,格式: static type value; 2、静态成员变量需要在类外面初始化才能够使用。初始化不要在构造函数初始化,会破坏数据(看例子)。类外初始化会在全局数据区申请空间;类外只作了声明没有进行赋值的话,就会在b
用法: 1、静态成员变量,在类中以static 标识,格式: static <type> <value>; 2、静态成员变量需要在类外面初始化才能够使用。初始化不要在构造函数初始化,会破坏数据(看例子)。类外初始化会在全局数据区申请空间;类外只作了声明没有进行赋值的话,就会在bss区标记下来,待运行时系统会初始化为0。(至于,数据区,bss区的说明,请查看相关资料。) 3、无论创建几个类对象,静态变量在类中只保留一份,被多个对象共享,所以读取和写入时最好也有个静态的互斥锁把它锁住,再进行读写。 查看例子原码:cat main.cpp 例: #include <stdio.h> #include <unistd.h> #include <mutex> 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]:%dn",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 ![]() (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |