C++ 如何使用boost单例

C++ 如何使用boost单例,c++,boost,C++,Boost,我是boost的新手。我发现有两种方法可以使用boost::singleton.Code,粘贴如下: // First class Foo {}; #define FooInstane singleton_default<Foo>::instance() // second class Bar : public singleton_default<Bar> {}; #define BarInstance Bar::instance() //首先 类Foo{}; #

我是boost的新手。我发现有两种方法可以使用boost::singleton.Code,粘贴如下:

// First 
class Foo {};
#define FooInstane singleton_default<Foo>::instance()

// second 
class Bar : public singleton_default<Bar> {};
#define BarInstance Bar::instance()
//首先
类Foo{};
#定义FooInstane单例\默认::实例()
//第二
类栏:公共单例\默认值{};
#定义BarInstance Bar::instance()
我认为两者都可以,但我找不到一些权威性的结论

问题: 哪一个是对的?或者两者都对(那么哪一个更好)


可以找到boost::singleton的文档。

两者都没有。类不再存在


该类从来不是为用户设计的。它仅用于Boost.Pool库的内部用途,显然已被删除。还有一些其他的单例类,但都隐藏在各种组件的私有细节中。

不要。单例是一种反模式。而且C++中从来没有意义,在这里你可以首先拥有非成员函数、文件静态变量和匿名命名空间。请参阅。@JanHudec感谢您的评论。我将尽量不使用它。但您能先回答我的问题吗?第二个问题为您提供了更大的灵活性,也不是使用singleton use shared instance。我对哪一个或多或少是正确的没有意见,但显然boost作者会这样做,因为它在上一个版本是1.47中支持的(截至本文撰写之时,我们已达到1.56)。我已无法在活动库中找到它(并非我搜索了很长时间).@JanHudec file静态变量比单例变量更糟糕,更容易导致静态初始化失败。我将把它放在这里,这样它就会出现在这个问题的侧栏中:这既解释了为什么boost使用单例变量,也解释了为什么boost库不向用户提供单例变量。