c++ Singleton by reference use

c++ Singleton by reference use

本文关键字:use reference by Singleton c++      更新时间:2023-10-16

我已经阅读了StackOverflow中的一些Wiki,并为Randomizer类编写了以下头文件:

class Randomizer
{
    public:
        static Randomizer& instance(void);
        int nextInt(int);
        int nextInt(int, int);
        int die(int);
        double nextDouble(void);
        char randomChar(const std::string&);
    private:
        Randomizer(void) {};
        /* No implementation of the following methods */
        Randomizer(Randomizer const&);
        void operator= (Randomizer const&);
};

我还实现了类内部的一些方法,比如nextInt等等。

我不确定如何创建这个Singleton类的实例,即如何在main()中编写测试驱动器?

我试过了:

int main()
{
     Randomizer r;
     r = Randomizer::instance();
}

编译器说几个错误:

In file included from Randomizer.cpp:11:0:
Randomizer.h: In function ‘int main(int, char**)’:
Randomizer.h:22:9: error: ‘Randomizer::Randomizer()’ is private
         Randomizer(void) {};
         ^
Randomizer.cpp:56:16: error: within this context
     Randomizer r;
                ^
In file included from Randomizer.cpp:11:0:
Randomizer.h:25:14: error: ‘void Randomizer::operator=(const Randomizer&)’ is private
         void operator= (Randomizer const&);
              ^
Randomizer.cpp:57:7: error: within this context
     r = Randomizer::instance();
       ^

谢谢你的帮助。

你说你想要一个singleton,但是:

Randomizer r; 

这通过尝试调用默认的空构造函数来构造Randomizer的新实例。因此,您并没有将其用作singleton,此外,您还声明了构造函数private。

r = Randomizer::instance();

在这里,您正试图将一个singleton复制分配给另一个,您已明确声明为private。

也许你打算使用:

Randomizer &r = Randomizer::instance()

如果随机化器本身没有可视状态,那么最好使用const Randomizer& instance()方法,而不是可变引用。

此代码尝试复制Randomizer实例。如果你不想直接使用instance()调用的结果,你应该使用返回的引用:

Randomizer &r = Randomizer::instance();