从指针返回引用

Mat*_*ero -1 c++ singleton pointers reference c++11

我有这节课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;
}
Run Code Online (Sandbox Code Playgroud)

我有这个实现singleton.cpp:

SingletonSample::SingletonSample() {}
SingletonSample::~SingletonSample() {}
SingletonSample& SingletonSample::Instance() {
    if(!_instance) _instance = new SingletonSample();
    return _instance;
}
int SingletonSample::DoSomething() const {
    return 20;
}
Run Code Online (Sandbox Code Playgroud)

尝试时出现编译错误return _instance.

我想要返回一个SingletonSample&,但我_instance是一个指针SingletonSample*.

我是C++的初学者,但据我所知,对某事的引用只是该事物的地址,而指向某事物的指针只是指向该地址的指针.

我想返回指针指向的地址作为参考SingletonSample&.

但是,我无法实现这一目标.我怎样才能做到这一点?

jua*_*nza 6

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

return *_instance;
Run Code Online (Sandbox Code Playgroud)

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

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

SingletonSample& SingletonSample::Instance() {
  static SingletonSample instance;
  return instance;
}
Run Code Online (Sandbox Code Playgroud)

另请注意,单身人士通常被认为是个坏主意.