gpt4 book ai didi

c++ - 单例实现问题

转载 作者:行者123 更新时间:2023-11-30 02:08:53 25 4
gpt4 key购买 nike

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 会导致编译器错误(它通过 Singletonboost::noncopyable 继承,所以我不确定你是怎么做到的可以编译您发布的代码。

关于c++ - 单例实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6028472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com