静态阵列初始化的良好设计

时间:2012-09-09 00:19:19

标签: c++ api

我对C ++中的优秀设计有疑问。我有一个class A,这个类的所有对象都使用整数数组的常量值(它们应该共享相同的数组,因为它们的值是常量)。需要在任何对象A之前计算数组(仅一次)。

我考虑过让另一个class B包含整数数组作为静态成员,init()方法将根据某个公式和静态布尔标志initialized填充此数组(如果此变量为true,则init()方法将不执行任何操作),但我不确定这是解决我的设计问题的最佳方法。

所以我的问题是,什么是一个好的设计/方法来实现这个目标?

提前致谢。

1 个答案:

答案 0 :(得分:2)

由于数组是常量,请使用const

由于数组是在类的所有实例之间共享的,因此请使用static

在您的标头文件中,声明

class A
{
    static const int the_array[10];
}

在A的源文件中,初始化一个实例

const int A::the_array[10] = { ... };

根据评论进行修改

或者,如果通过算法更好地生成数组,请使用常量指针。数组的用法语法是相同的。

请注意,数组和指针都是const

标题

class A
{
    static const int * const the_array;
}

源文件:

namespace
{
  const int * generate_my_array()
  {
    // Allocate an array, initialize it, return it.
  }
}

const int * const A::the_array = generate_my_array();