【发布时间】:2018-08-13 06:10:57
【问题描述】:
我有一个带有静态非原始成员的类。例如:
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;
g_my_global_class 被声明为全局变量,所以它的析构函数在离开 main() 后被调用。 但是 MyClass::m_object 是静态的,所以在 main() 之后也会被销毁。
是否可以保证 ~MyClass() 将在 MyClass::m_object 的 ~SomeObject() 之前执行?换句话说,当调用全局类实例的析构函数时,是否可以假设该类的静态成员仍然可以访问,还是取决于构造/销毁顺序?
如果按这个顺序写代码,我认为g_my_global_class是后面构造的,所以应该先销毁。如果线路发生变化,事情会发生变化
MyClass g_my_global_class;
移动到另一个 .cpp 文件并且其文件名导致顺序改变?
【问题讨论】:
-
"全局对象中的静态成员" - 静态成员首先不在特定对象中;这就是使它们成为静态的原因。
-
对不起。我已经修改了标题。
标签: c++ static destructor member