类的静态成员是类的对象时,构造函数跟析构函数中无法输出

类的静态成员是类的对象时,构造函数和析构函数中无法输出
类Derived中静态成员(Base) a 的构造和析构时无log输出,
记得好像是构造和析构在main外的系统级执行的,所以输出无效,
请高手详细说明一下,
另外,全局的类对象 和 文件中静态类对象 的构造和析构析构都能输出log,
是不是说明 类的静态类对象的生命周期比全局类对象 长 ?


#include <iostream>
using namespace std;
class Base
{
public:
Base(){cout<<"Base::constructor"<<endl;}
~Base(){cout<<"Base::deconstructor"<<endl;}
};
class Derived:public Base
{
public:
Derived(){cout<<"Derived::constructor"<<endl;}
~Derived(){cout<<"Derived::deconstructor"<<endl;}
private:
static Base a;
};
int main()
{
Derived D;

return 0;
}
/* Output
Base::constructor
Derived::constructor
Derived::deconstructor
Base::deconstructor
*/

------解决方案--------------------
在类外面加一句Base Derived::a;
要不然这个静态成员根本不存在类的静态成员是类的对象时,构造函数跟析构函数中无法输出
------解决方案--------------------
静态数据成员是属于一个类的,不属于这个类的任何一个对象,但这个类的对象都可以调用,在创建这个类的第一个对象之前,该静态数据成员就已经存在了,一般是在编译时完成分配空间及初始化的工作,
------解决方案--------------------
楼主啊, 
1、 静态成员变量不是你这么初始化的。 按照一楼的修改就行。
2、 断点跟踪main函数,你会发现先执行的是CRT的  mainCRTStartup() 接口, 在该接口中会执行一个叫做_initterm的函数(google一下,你就知道), _initterm 将处于同一编译单元中的全局变量、静态变量的动态初始化是按照出现顺序依次执行,程序结束时销毁全局变量、静态变量是按照其初始化顺序逆序执行,即后进先出。   然后才执行 你编写的main函数。  那么可以肯定的说,静态变量和全局变量的生命周期在程序员看来是一样的。