类静态成员类外初始化与在另一个类成员函数赋值


为什么类的静态成员要在类外初始化

因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。

C++的静态成员是需要初始化的(实际上需要分配一个内存,不一定需要赋值),初始化是赋一个初始值,而定义是分配内存。静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义。 静态成员是单独存储的,并不是对象的组成部分。如果在类的内部进行定义,在建立多个对象时会多次声明和定义该变量的存储位置。在名字空间和作用于相同的情况下会导致重名的问题。

  • 静态常量成员可以在类内初始化

类的静态成员变量在另一个类赋值

//头文件代码 a.h
class SPostMsgToMain
{
public:

//存储消息线程的指针
static CWinThread* m_pThread;
};


//a.cpp
SPostMsgToMain::m_pThread=NULL;   //此处为静态成员的定义。该定义要写在实现文件里面,不能写在头文件里面


//thread.cpp
QueryThread::QueryThread(void)
{
    SPostMsgToMain::m_pThread = this;
}

Re:

https://blog.csdn.net/sevenjoin/article/details/81772792

https://blog.csdn.net/lvquanye9483/article/details/81946116

下面是09年已经删除的帖子,这是bing保存的快照:

http://cncc.bingj.com/cache.aspx?q=类的静态成员变量在另一个类赋值