繁体   English   中英

静态对象和全局对象的销毁顺序是什么?

[英]What is the order of destruction for static objects and global objects?

如果在程序中我创建了一个 meyer 单例和一个在其构造函数和析构函数中都使用这个 meyer 单例的对象,只要使用 meyer 单例的对象在单例本身之前被销毁(就像它在函数中一样)范围)。

现在,如果我将同一个对象设为全局,我会看到段错误。 原因是单例在全局对象之前被销毁。

这是编译器定义的行为还是标准定义的行为? 有什么办法可以修改这种行为吗?

任何指针将不胜感激。

静态对象和全局对象的销毁顺序是什么?

具有静态存储持续时间的对象的销毁顺序与其初始化顺序相反。

这是编译器定义的行为还是标准定义的行为?

破坏的相反顺序是标准的。

非局部静态对象的初始化顺序与单个翻译单元内的声明顺序相同。 翻译单元之间的顺序未指定。 本地静态对象在执行第一次通过它们的声明时被初始化。

有什么办法可以修改这种行为吗?

您可以通过重新排序它们的声明来影响翻译单元内非局部静态对象的初始化顺序。 您可以通过更早或更晚地调用该函数来影响本地静态对象的初始化顺序。 破坏的顺序是通过改变初始化的顺序间接影响的。

您不能影响翻译单元之间具有静态存储持续时间的非本地对象的初始化顺序,并且您不能依赖该顺序。

暂无
暂无

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

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