小编Mar*_*ark的帖子

使用全局实例破坏类中的静态成员

我有一个带有静态非原始成员的类.例如:

class SomeObject
{
    ... // something that will be destroyed in destructor,
        // like an array pointer.

public:
    SomeObject();
    ~SomeObject(); 
};

class MyClass
{
    static SomeObject m_object;

public:
    MyClass();
    ~MyClass(); // this will access m_object

    static bool SetupStaticMember();
};

/// Implementation of SomeObject and MyClass ///

SomeObject MyClass::m_object;
bool dummy = MyClass::SetupStaticMember(); // Setup the values in m_object, for example,
                                           // allocate memory that will be released in ~SomeObject().

MyClass g_my_global_class;
Run Code Online (Sandbox Code Playgroud)

g_my_global_class被声明为全局变量,因此在离开main()之后调用析构函数.但是,MyClass :: m_object是静态的,所以它也会在main()之后被销毁.

有没有保证~MyClass()会在MyClass :: m_object之前的〜SomeObject()之前执行?换句话说,当调用全局类实例的析构函数时,我可以假设此类的静态成员仍然存在,或者这取决于构造/销毁订单吗?

如果代码按此顺序编写,我认为g_my_global_class是稍后构造的,因此应首先对其进行破坏.如果线路做的事情会改变

MyClass …
Run Code Online (Sandbox Code Playgroud)

c++ static destructor member

7
推荐指数
1
解决办法
495
查看次数

标签 统计

c++ ×1

destructor ×1

member ×1

static ×1