将下面的代码放在一个翻译单元中:
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];发布于 2011-12-02 21:43:15
是C:我总是在C::数据之后初始化,无论两者的定义顺序如何?
如果它们是在同一个编译单元中定义的,则保证顺序,否则不会。
这个解决方案是计算静态数据的最优雅的解决方案吗?
不是的。如果您确实必须让它保持静态,那么更好的方法(并防止可能的静态初始化顺序失败)是这样做:
struct someDataStr
{
int data[200];
};
someDataStr& AccessData()
{
static someDataStr *ptr = NULL;
if ( NULL == ptr )
{
ptr = new someDataStr;
// initialize value
}
return *ptr;
}如果它不必是静态的,那么使用依赖注入,并将包含数据的对象传递给使用它的所有类。
https://stackoverflow.com/questions/8362921
复制相似问题