const指针返回引用

时间:2011-12-21 22:09:29

标签: c++

我有一个单例类,其中包含一个每个其他类实例都要使用的变量。 现在我想在我的单例类中添加一个函数,比如“GetReference”。

  1. 是否可以返回对变量的引用?如果是这样,我该如何返回对变量的引用?
  2. 如何让其他人仅使用而不是修改或删除变量。 const会为我的案子工作吗?

5 个答案:

答案 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的引用,这样每个人都应该只使用它但不修改内容或删除指针。