我有一个单例类,其中包含一个每个其他类实例都要使用的变量。 现在我想在我的单例类中添加一个函数,比如“GetReference”。
const
会为我的案子工作吗?答案 0 :(得分:2)
1)要返回变量的引用,请使用以下语法:
int& getARefOnDummy()
{
return dummy;
}
2)要返回const ref(无法修改或删除),请使用以下语法:
const int& getARefOnDummy()
{
return dummy;
}
答案 1 :(得分:0)
const
修饰符适合您。在以下示例中,实例/静态变量x
将无法被调用getReference的任何内容修改。
const int& Singleton::getReference() const
{
return x;
}
答案 2 :(得分:0)
严格来说,const修饰符可以输出并修改变量。按值返回比内部变量的引用更安全,更好。
如果按值返回很昂贵(例如返回一个大类的对象),则委托模式可以与简单的包装类和对实现的私有引用一起使用。
答案 3 :(得分:0)
您可以返回引用,但前提是它是静态的或对象的一部分(即没有局部变量)。
您还可以返回对该类对象的引用:
class Singleton
{
private:
static Singleton *singleton = 0;
Singleton() // making the constructor private keeps others from creating their own instance
{
}
~Singleton() // making the destructor private keeps others from destroying their instance on their own
{
}
public:
static Singleton *GetPtr(void)
{
if(!singleton)
singleton = new Singleton();
return singleton;
}
static Singleton &GetRef(void)
{
return *GetPtr(); // dereference the pointer
}
static void Free(void)
{
if(!singleton)
return;
delete singleton;
singleton = 0;
}
}
你也可以返回一个const指针和/或引用,这取决于你想对你的类做什么(因为我不知道你是否只想让别人不要删除或修改)。请记住,有办法欺骗这个(const_cast<>()
)。
答案 4 :(得分:0)
#include <stdio.h>
using namespace std;
//This is the class, which I want to keep others to delete or modify
class Ref{
public:
int X;
};
class SingleTon{
private:
static Ref reference;
public:
SingleTon(){
// reference = new Ref();
}
static const Ref& getReference(){return reference;}
};
int main(){
Ref * ptr = SingleTon::getReference();
}
如果我说SingleTon :: getReference(),我应该得到Class Ref的引用,这样每个人都应该只使用它但不修改内容或删除指针。