Singleton设计模式说我们应该在“single instance”类中定义一个私有静态属性。但是,没有适当的解释为什么数据成员必须是私有静态的。如果数据成员只是私有的,会有什么不同吗?
在以下代码中:
class Singleton
{
public:
static Singleton* getInstance();
private:
Singleton(){/*Private constructor*/}
~Singleton(){/*Private destructor*/}
static Singleton * instance; //Why static is required?
};
如果数据成员实例
不是静态的,会有什么不同吗?
编辑:通过公开析构函数,它会改变单例设计的属性吗?
静态意味着它是类的一部分,该类的所有对象(实例)都将指向同一个实例。
“getInstance”是一个只能访问静态对象的静态方法。如果“实例”不是静态的,不是“类”的一部分,那么“getInstance”不能返回实例。
尝试使用声明为非静态的实例运行以下代码:
static Singleton* getInstance()
{
if (instance == nullptr)
instance = new Singleton();
return instance;
}
对于单例类,应该禁止用户从中创建对象。因此,构造函数是私有的,并防止复制构造函数和赋值运算符。
Classname(Classname const&) = delete;
Classname(Classname const&&) = delete;
Classname& operator=(classname const&) = delete;
Classname& operator=(classname const&&) = delete;
那么获取实例的唯一方法就是使用类的一些静态函数,静态函数只能访问静态变量。这就是为什么实例变量总是静态变量。
getInstance的另一个选择是
static Classname& getInstance()
{
static Classname instance;
return instance;
}
问题内容: Swift的最佳做法是什么? 选项1: 然后 选项2: 然后 问题答案: tl; dr 当您存储可变状态时的选项1(类或结构),因为您需要其他实例。 当您要存储静态变量时,可以使用选项2(作用域全局变量),因为它速度更快且使用的内存更少。 具有变量的Singleton类(或结构) 全球状态通常被认为是“坏事”。很难考虑,会引起问题,但有时是不可避免的。 如果您想拥有多个实例,请创建一个
我想使用Powermock(基于EasyMock)模拟私有静态内部类。这不是来自生产代码,这只是一个是否可能的问题。我很确定这是一个糟糕的设计,但这是我为科学而努力的东西。 假设我们有一个具有静态私有内部类的类: IExpectationSetters中的andReturn(capture)不能应用于(java.lang.Object) 私人静态内部阶级的嘲笑甚至可能吗?我还没有在SO上找到一个
我是kotlin的新手,当我阅读kotlin中的数据类时,我发现了这些代码。这基本上是java模型类和kotlin数据类之间的比较,而且这两个代码都执行相同的任务。 代码1 代码2 我的问题是,在数据类中,所有变量都是公共的而不是私有的,任何人都可以在此类对象的帮助下直接访问变量,但在java代码中,所有变量都是私有的,这就是为什么我们必须为这些成员变量编写getter和setter,如果它是公共
编译良好:gcc Version4.8.5(Ubuntu4.8.5-2Ubuntu1~14.04.1) 结果出现错误:clang Version3.4-1Ubuntu3(TAGS/RELEASE_34/FINAL)(基于LLVM 3.4)
我正在装一个应用程序,它工作得很好。但当我使用 在OuterClass中,并通过
问题内容: 单例与仅填充静态字段的类有何不同? 问题答案: 几乎每次我编写静态类时,我最终都希望自己将其实现为非静态类。考虑: 可以扩展非静态类。多态可以节省很多重复。 非静态类可以实现接口,当您要将实现与API分开时,该接口会派上用场。 由于这两点,非静态类使编写依赖它们的项目的更可靠的单元测试成为可能。 但是,单例模式距离静态类仅半步之遥。你_那种_得到这些好处,但如果你是直接与其它类中通过`