通常来说,构造函数不能private,不然外界创建对象的时候无法调用了。那什么时候会用到这个方式呢? 答案是单例模式
代码
class A {
public:
static A& getInstance( return a; );
setup() { ... }
private:
A();
A(const A& rhs);
static A a;
...
};
分析
- class里有static A,所以一开始就创建好了一个静态变量A a
- 构造函数放到private,所以外界不能直接创建A
- 外界调用 getInstance 的时候,返回之前创建好的a
问题
a一开始就存在了。即使外界没有调用 getInstance ,它也已经存在了。因为在class定义里就写了static A a
优化代码
class A
{
public:
static A& getInstance();
setup() {...}
private:
A();
A(const A& rhs);
...
}
A& A::getInstance()
{
static A a;
return a;
}
代码调用 A::getInstance().setup()
分析
- 多个构造函数,放到private,所以外界不能直接创建A
- 外界调用 getInstance 的时候,利用
static A a创建了一个A并返回 - 创建A是内部函数getInstance创建的,所以可以调用private的构造函数
说明
static的变量,只有当执行这一行时才执行并生成。
所以在优化代码里,只有调用了getInstance,才会创建一个static A