【发布时间】:2012-05-05 16:45:40
【问题描述】:
特定 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;
};
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);
...
}
m_version 静态成员何时创建和销毁?出现异常怎么办?
【问题讨论】:
-
我认为假设您的代码在 Windows NT 上是相当安全的。
-
什么时候创建和销毁 m_version 静态成员? w.r.t 或与什么比较?静态成员的初始化顺序与在 TU 中声明的顺序相同。整个 TU 的顺序没有定义。
标签: c++