我有一个跨平台库,仅在iPhone上且仅在发行版下才有奇怪的问题。

// .h
class cColor
{
public:
   static const cColor Red;
   static const cColor Green;
   static const cColor Blue;

   u8 r;
   u8 g;
   u8 b;
   u8 a;

   inline cColor(...) : ... { }
};

// .cpp
const cColor cColor::Red(0xFF, 0x00, 0x00);
const cColor cColor::Green(0x00, 0xFF, 0x00);
const cColor cColor::Blue(0x00, 0x00, 0xFF);

它看起来确实像是一个初始化顺序的惨败,但是问题不在于静态方法,而在于程序的后面。所有cColor::Red,Green,Blue都设置为0。实际上,我在构造函数的{}中放入了一些printf,虽然它不打印任何内容,但是由于在全局初始化期间,所以可能没问题。

现在最糟糕的部分是:该库也一直在Release中工作,直到最近才添加了一些功能(200-300行)甚至无法执行的Objective-C代码。仅仅通过减少代码大小,我就可以解决此问题,但这对我而言并不是真正的选择。而且应用程序不是那么大,内存不是问题。

Btw cColor包含在库中的预编译头文件中,以及稍后在使用该库的应用程序中。

救命!我真的没有主意。

编辑:这里是更多信息...

我只将初始化代码从库中移到了我的应用程序中,现在
常量已正确初始化。

我真的认为链接器弄乱了某些东西。

有任何想法吗?

最佳答案

您可以轻松防止静态初始化命令惨败:http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.15

// 。H
cColor类
{
上市:
静态const cColor&Red();
静态const cColor&Green();
静态const cColor&Blue();

u8 r;
u8 g;
u8 b;
u8 a;

内联cColor(...):... {}
};

// .cpp
const cColor&cColor::Red(){
静态cColor * redColor = new Color(0xFF,0x00,0x00);
返回* redColor;
};

/ *等* /

我不知道这是否对您的症状有帮助。

关于c++ - 静态const初始化iPhone/发布,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3222462/

10-09 16:38