C++ 常量指针返回引用

C++ 常量指针返回引用,c++,C++,我有一个带有变量的单例类,每个其他类实例都将使用该变量。 现在我想在我的单例类中放一个函数,比如“GetReference” 是否可以返回对变量的引用?如果是,如何返回对变量的引用 如何使其他人只使用而不修改或删除变量。const对我的案例有效吗 1) 要返回变量的引用,请使用以下语法: int& getARefOnDummy() { return dummy; } 2) 要返回常量ref(无法修改或删除),请使用以下语法: const int& getARefOn

我有一个带有变量的单例类,每个其他类实例都将使用该变量。 现在我想在我的单例类中放一个函数,比如“GetReference”

  • 是否可以返回对变量的引用?如果是,如何返回对变量的引用
  • 如何使其他人只使用而不修改或删除变量。
    const
    对我的案例有效吗
  • 1) 要返回变量的引用,请使用以下语法:

    int& getARefOnDummy() 
    {
         return dummy;
    }
    
    2) 要返回常量ref(无法修改或删除),请使用以下语法:

    const int& getARefOnDummy() 
    {
          return dummy;
    }
    

    const
    修饰符将适用于您。在下面的示例中,实例/静态变量
    x
    将无法被调用getReference的任何对象修改

    const int& Singleton::getReference() const
    {
        return x;
    }
    

    严格地说,常量修饰符可以抛出,变量可以修改。按值返回是比引用内部变量更安全、更好的选择


    如果按值返回很昂贵(例如返回一个大型类的对象),则可以将委托模式与一个简单的包装类和对实现的私有引用一起使用。

    您可以返回一个引用,但前提是它是静态的或对象的一部分(即没有局部变量)

    还可以返回对类的对象的引用:

    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_cast()
    )。

    包括
    使用名称空间std;
    //这就是我想让其他人删除或修改的类
    类参考{
    公众:
    int X;
    };
    单件阶级{
    私人:
    静态参考;
    公众:
    SingleTon(){
    //reference=新Ref();
    }
    静态常量Ref&getReference(){return reference;}
    };
    int main(){
    Ref*ptr=SingleTon::getReference();
    }
    
    如果我说SingleTon::getReference(),我应该得到类Ref的引用,这样每个人都应该只使用它,而不是修改内容或删除指针

    #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();
    }