繁体   English   中英

何时创建并销毁静态成员?

[英]When static members are created and destroyed?

究竟何时创建并销毁特定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静态成员? 如果有例外情况会怎样?

静态成员在main()之前初始化,并且在main()返回之后以创建时的相反顺序销毁它们。

静态成员是静态分配的,其生存期始于程序。

异常不适用于静态成员初始化,因为您无法在那里捕获静态对象将引发的任何异常。 您甚至不应该在程序开始之前就“期望”静态成员初始化问题,这显然是一个错误。您的编译器和链接器将让您知道静态定义的任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM