【发布时间】:2013-08-02 19:54:03
【问题描述】:
我想知道是否有人可以阐明 C++ 中的内存释放过程。
如果我有一个我声明为静态的结构,那么它的构造函数是首先要执行的,而它的析构函数是最后要执行的:
struct initializer execute_before_and_after_main {
initializer() { init(); }
~initializer() { cleanup(); }
}
static initializer execute_around_main;
然后我有类似的东西:
class my_class {
my_object objects[100];
}
extern my_class gobal_my_class;
my_class global_my_class;
这里 main 并不重要:
int main (int argc, char* argv[]) {
....
}
当调用cleanup() 时,objects 数组现在是否包含已释放/无效的内存?是否有 c++ 在这里实现的标准初始化/销毁序列,有人可能会指出我?
谢谢
编辑:我知道这种类型的代码可能不是最佳实践,但我仍然想知道行为是否已定义。
【问题讨论】:
-
是时候熟悉storage duration了
-
@CaptainObvlious 哈哈,我正准备在我的答案中添加相同的链接
-
对于具有静态存储持续时间的对象的初始化和销毁没有标准定义的顺序;这被称为static initialization order fiasco
-
@Praetorian:是的,部分存在。
-
@MooingDuck 你指的是如果它们在同一个TU中定义,它们将按声明顺序初始化?如果是这样,标准中是否真的提到了这一点?它可能只是每个实现都会做的事情之一,但不是强制性的......我不知道......
标签: c++