gpt4 book ai didi

c++ - Singleton 类中的静态私有(private)数据成员

转载 作者:太空宇宙 更新时间:2023-11-04 16:05:55 25 4
gpt4 key购买 nike

单例设计模式说我们应该在“单实例”类中定义一个私有(private)静态属性。但是,没有正确的解释为什么数据成员必须是私有(private)静态的。如果数据成员只是私有(private)的,会有什么不同吗?

在下面的代码中:

class Singleton
{
public:
static Singleton* getInstance();

private:
Singleton(){/*Private constructor*/}
~Singleton(){/*Private destructor*/}
static Singleton * instance; //Why static is required?
};

如果数据成员 instance 不是静态的,会有什么不同吗?

编辑:将析构函数公开,是否会改变单例设计的特性?

最佳答案

对于一个单例类,你应该禁止用户从它创建对象。因此,您将构造函数设为私有(private),并防止复制构造函数和赋值运算符。

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;
}

关于c++ - Singleton 类中的静态私有(private)数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35575491/

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