gpt4 book ai didi

c++ Singleton 通过引用使用

转载 作者:太空狗 更新时间:2023-10-29 23:50:50 24 4
gpt4 key购买 nike

我已经阅读了 StackOverflow 中的一些维基,并为我的 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();
^

感谢您的帮助。

最佳答案

你是说你想要一个单例但是:

Randomizer r; 

这通过尝试调用默认的空构造函数来构造 Randomizer 的新实例。所以你没有将它用作单例,此外你还声明了构造函数私有(private)。

r = Randomizer::instance();

在这里,您试图将一个单例复制分配给另一个您明确声明为私有(private)的单例。

也许你打算使用:

Randomizer &r = Randomizer::instance()

如果随机发生器本身没有可见状态,使用const Randomizer& instance() 方法可能比使用可变引用更好。

关于c++ Singleton 通过引用使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26261482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com