2
//s_request_view() constructor is declared as below
namespace Identity_VIEW
{
Published_view_identity s_request_view("SAMPLE");
};

//The constructor is called in another source file as below,
bind_view(Identity_VIEW::s_request_view);

相同的代码在 Windows 上运行良好,但在 SBC (PowerPC) 上 s_request_view 作为 NULL 传递。

谁能帮我找出为什么它的行为不同?

4

1 回答 1

6

我想,这里的答案是编译器不保证全局变量初始化的顺序。如果您的 bind_view 是从另一个全局变量的构造函数中调用的 - 您将遇到一个浮动错误。

尝试使用以下方法:

namespace Identity_VIEW
{
   Published_view_identity & getRequestView()
   {
      static Published_view_identity s_request_view ("Sample");
      return s_request_view;
   }
}

...
bind_view(Identity_VIEW::getRequestView());

这可以帮助解决全局变量初始化的顺序。然而,这个解决方案不是线程安全的(如果你关心的话)......

于 2010-06-29T06:46:50.153 回答