gpt4 book ai didi

C++ 静态初始化顺序

转载 作者:IT老高 更新时间:2023-10-28 13:22:46 25 4
gpt4 key购买 nike

当我在 C++ 中使用静态变量时,我经常想要初始化一个变量并将另一个变量传递给它的构造函数。换句话说,我想创建相互依赖的静态实例。

在单个 .cpp 或 .h 文件中,这不是问题:实例将按照声明的顺序创建。但是,当您想用另一个编译单元中的实例初始化静态实例时,似乎无法指定顺序。结果是,根据天气情况,可能会构建依赖于另一个实例的实例,然后才构建另一个实例。结果是第一个实例初始化不正确。

有谁知道如何确保以正确的顺序创建静态对象?我已经寻找了很长时间的解决方案,尝试了所有解决方案(包括 Schwarz Counter 解决方案),但我开始怀疑是否有一个真正有效的解决方案。

一种可能性是使用静态函数成员的技巧:

Type& globalObject()
{
static Type theOneAndOnlyInstance;
return theOneAndOnlyInstance;
}

确实,这确实有效。遗憾的是,您必须编写 globalObject().MemberFunction(),而不是 globalObject.MemberFunction(),导致客户端代码有些困惑和不优雅。

更新:感谢您的 react 。遗憾的是,似乎我确实已经回答了我自己的问题。我想我必须学会忍受它......

最佳答案

您已经回答了自己的问题。静态初始化顺序是未定义的,最优雅的解决方法(同时仍然进行静态初始化,即不完全重构它)是将初始化包装在一个函数中。

阅读从 https://isocpp.org/wiki/faq/ctors#static-init-order 开始的 C++ FAQ 项目

关于C++ 静态初始化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1005685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com