C++ Boost智能指针和静态初始化顺序失败

C++ Boost智能指针和静态初始化顺序失败,c++,boost,C++,Boost,我在代码中广泛使用boost智能指针 我最近看到一些奇怪的内核转储,其中一个值得关注的领域是静态初始化顺序失败和boost智能指针的可能性 将boost::shared_ptr作为静态对象是否存在问题。 我已经检查了boost代码,在共享的ptr中没有看到任何会引起关注的静态数据 该模式的示例如下所示: class ObjectFactory { public: static boost::shared_ptr<ObjectInterface> createObject();

我在代码中广泛使用boost智能指针

我最近看到一些奇怪的内核转储,其中一个值得关注的领域是静态初始化顺序失败和boost智能指针的可能性

将boost::shared_ptr作为静态对象是否存在问题。 我已经检查了boost代码,在共享的ptr中没有看到任何会引起关注的静态数据

该模式的示例如下所示:

class ObjectFactory {
public:
    static boost::shared_ptr<ObjectInterface> createObject();
private:
    static boost::shared_ptr<ObjectInterface> m_object;
};
类对象工厂{
公众:
静态boost::shared_ptr createObject();
私人:
静态boost::共享的\u ptr m_对象;
};
工厂隐藏实际返回给用户的实现。它还确保只创建一个实现实例,并将其存储在m_对象中。 一旦主数据完成,即静态数据被清除,m_对象将被销毁

我也可以在这里使用单音模式,但是静态实例变量将绑定到静态boost共享的ptr

如果可能的话,我想确认上述模式没有问题

多谢各位。
Dave。

AFAIK同一翻译单元中的静态实体没有初始化顺序失败。您没有提供足够的信息以获得明确的答案。如果在
main
开始之前调用
createObject()
,那么这是一个值得关注的问题。使用函数局部静态而不是静态成员变量可能是一个不错的选择,因为它将根据需要创建,关于静态和初始化的一般说明:较新版本的gcc在函数本地静态周围添加了一个不可见的编译器生成的互斥体,以避免两个线程运行相同的单例析构函数的可能性。见例。