template <class T>
class Singleton
{
public:
static T& instance()
{
boost::call_once(init, flag);
return *t;
}
static void init()
{
t.reset(new T());
}
protected:
~Singleton() {}
Singleton() {}
private:
static boost::scoped_ptr <T> t;
static boost::once_flag flag;
};
template <class T> boost::scoped_ptr<T> Singleton<T>::t(0);
template <class T> boost::once_flag Singleton<T>::flag = BOOST_ONCE_INIT;
class TestClass : public Singleton<TestClass>
{
friend class Singleton<TestClass>;
private:
TestClass(){}
};
对于上述实现,我在下面有一个问题:TestClass class1 = TestClass::instance();
TestClass class2 = TestClass::instance();
我找到了&class1 != &class2
,这是单例吗? 最佳答案
TestClass class1 = TestClass::instance();
您正在复制工厂返回的对象,因此每次都会得到一个不同的对象。
为防止这种情况,请获取您的单例的引用:
TestClass& class1 = TestClass::instance();
仍然有些奇怪,因为复制MyClass会导致编译器错误(它通过
boost::noncopyable
继承自Singleton
,所以我不确定如何编译发布的代码。关于c++ - 单例实现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6028472/