从指针返回引用
Returning a reference from a pointer
我在 singleton.h
中有这个 class:
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
时遇到编译器错误。
我想return一个SingletonSample&
,但是我的_instance
是一个指针SingletonSample*
。
我是 C++ 的初学者,但据我了解,对某物的引用只是指向某物的地址,而指向某物的指针只是指向该地址的指针。
我想return指针指向的地址,作为参考SingletonSample&
。
但是,我无法做到这一点。我该怎么做?
引用不是对象的地址。它只是一个别名。您只需取消引用指针:
return *_instance;
这让引用引用 _instance
指向的对象。
注意实现可以大大简化:
SingletonSample& SingletonSample::Instance() {
static SingletonSample instance;
return instance;
}
另请注意,单例是 generally considered a bad idea。
我在 singleton.h
中有这个 class:
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
时遇到编译器错误。
我想return一个SingletonSample&
,但是我的_instance
是一个指针SingletonSample*
。
我是 C++ 的初学者,但据我了解,对某物的引用只是指向某物的地址,而指向某物的指针只是指向该地址的指针。
我想return指针指向的地址,作为参考SingletonSample&
。
但是,我无法做到这一点。我该怎么做?
引用不是对象的地址。它只是一个别名。您只需取消引用指针:
return *_instance;
这让引用引用 _instance
指向的对象。
注意实现可以大大简化:
SingletonSample& SingletonSample::Instance() {
static SingletonSample instance;
return instance;
}
另请注意,单例是 generally considered a bad idea。