作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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 会导致编译器错误(它通过 Singleton
从 boost::noncopyable
继承,所以我不确定你是怎么做到的可以编译您发布的代码。
关于c++ - 单例实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6028472/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!