首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >静态数据成员初始化顺序

静态数据成员初始化顺序
EN

Stack Overflow用户
提问于 2011-12-02 21:29:29
回答 3查看 790关注 0票数 3

将下面的代码放在一个翻译单元中:

代码语言:javascript
复制
class C {
private:

    struct Init {

        Init() {
            /* compute data once here */
        }
    };
    static const Init& i;
    static int data[];
public:
    /* interface for reading data */
};

const C::Init& C::i = Init();
int C::data[200];

  1. 是C::我总是在C::数据之后初始化,不管两者的定义顺序如何?
  2. 这个解决方案是计算静态数据的最优雅的解决方案吗?
EN

Stack Overflow用户

发布于 2011-12-02 21:43:15

是C:我总是在C::数据之后初始化,无论两者的定义顺序如何?

如果它们是在同一个编译单元中定义的,则保证顺序,否则不会。

这个解决方案是计算静态数据的最优雅的解决方案吗?

不是的。如果您确实必须让它保持静态,那么更好的方法(并防止可能的静态初始化顺序失败)是这样做:

代码语言:javascript
复制
struct someDataStr
{
  int data[200];
};
someDataStr& AccessData()
{
  static someDataStr *ptr = NULL;
  if ( NULL == ptr )
  {
    ptr = new someDataStr;
    // initialize value
  }
  return *ptr;
}

如果它不必是静态的,那么使用依赖注入,并将包含数据的对象传递给使用它的所有类。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8362921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档