我在singleton.h
中有这个课程:
class SingletonSample {
public:
static SingletonSample& Instance();
int DoSomething() const;
private:
SingletonSample();
~SingletonSample();
SingletonSample(const SingletonSample&) = delete;
SingletonSample& operator=(const SingletonSample&) = delete;
static SingletonSample* _instance;
}
我在singleton.cpp
中有这个实现:
SingletonSample::SingletonSample() {}
SingletonSample::~SingletonSample() {}
SingletonSample& SingletonSample::Instance() {
if(!_instance) _instance = new SingletonSample();
return _instance;
}
int SingletonSample::DoSomething() const {
return 20;
}
尝试return _instance
时出现编译错误。
我想要返回SingletonSample&
,但我的_instance
是指针SingletonSample*
。
我是C ++的初学者但据我所知,对某事的引用只是该事物的地址,而指向某事物的指针只是指向该地址的指针。
我想将指针指向的地址作为参考SingletonSample&
返回。
然而,我无法实现这一目标。我怎么能这样做?
答案 0 :(得分:6)
引用不是对象的地址。它只是一个别名。您只需要取消引用指针:
return *_instance;
这使引用引用_instance
指向的对象。
请注意,实施可以大大简化:
SingletonSample& SingletonSample::Instance() {
static SingletonSample instance;
return instance;
}
另请注意,单身人士为generally considered a bad idea。