如何解决如何重新启动单例?
我知道这听起来很奇怪,但是我想重新启动一个单例以将其所有变量都设置回默认值。 我有以下单例课程:
class Singleton {
public:
static Singleton &getInstance(){
static Singleton instance;
return instance;
}
Singleton(const Singleton &) = delete;
Singleton(Singleton &&) = delete;
Singleton &operator=(const Singleton &) = delete;
Singleton &operator=(Singleton &&) = delete;
static void clearSingleton(){
//Recreate instance object??
}
int a = 0;
int b = 0;
int c = 0;
//etc...
}
我的程序对变量进行了很多更改,例如:
Singleton::getInstance().a = 5;
Singleton::getInstance().b = 8;
//etc...
过一会儿,我需要重置所有变量。我可以在单例中粗略地添加一个重置函数,该函数将设置所有变量,但是由于它们如此之多,而且很容易忘记为重置函数添加新变量,我只想删除单例并重新创建它。在这种情况下,所有变量将自动重置。 我该怎么办?
解决方法
如果您只是默认移动分配运算符,但将其设为私有:
class Singleton {
Singleton &operator=(Singleton &&) = default;
public:
// ...
};
您可以写:
static void clearSingleton() {
getInstance() = Singleton{};
}
这里是demo。
您可以对所有特殊成员函数执行此操作,因此最好保持一致。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。