从指针返回引用

时间:2015-05-13 12:05:43

标签: c++ pointers c++11 reference singleton

我在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&返回。

然而,我无法实现这一目标。我怎么能这样做?

1 个答案:

答案 0 :(得分:6)

引用不是对象的地址。它只是一个别名。您只需要取消引用指针:

return *_instance;

这使引用引用_instance指向的对象。

请注意,实施可以大大简化:

SingletonSample& SingletonSample::Instance() {
  static SingletonSample instance;
  return instance;
}

另请注意,单身人士为generally considered a bad idea