何时创建并销毁特定C++类的静态成员?假设我已经定义了一个WinVersion类:
WinVersion.h
class WinVersion {
public:
// static methods
static WinVersion& Get();
static bool Is_NT();
// singleton
static WinVersion m_version;
// constructor
WinVersion();
private:
unsigned short m_PlatformId;
unsigned short m_MajorVersion;
unsigned short m_MinorVersion;
unsigned short m_BuildNumber;
};
Run Code Online (Sandbox Code Playgroud)
WinVersion.cpp:
// static members
WinVersion WinVersion::m_version = WinVersion(); // unsure if it's good enough
// static functions
WinVersion& WinVersion::Get() {
return m_version;
}
bool WinVersion::Is_NT() {
return (m_version.m_PlatformId == VER_PLATFORM_WIN32_NT);
}
// constructor
WinVersion::WinVersion()
{
OSVERSIONINFO osinfo;
osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
...
}
Run Code Online (Sandbox Code Playgroud)
什么时候会m_version创建和销毁静态成员?如果出现异常会发生什么?
静态成员在main()之前初始化,并且在main()中返回后以与创建相反的顺序销毁它们.
静态成员是静态分配的,它们的生命周期从程序开始和结束.
异常不适用于静态成员初始化,因为您无法捕获静态对象将抛出的任何异常.在程序开始之前,您不应该"期望"存在静态成员初始化问题,这显然是一个错误.您的编译器和链接器将让您知道静态定义的任何问题.