看代码:
#include <stdio.h>
#include <stdlib.h>
class CSingleton
{
public:
static CSingleton* instance();
private:
CSingleton()
{
mValue = 100;
printf("constructor, mValue = %d\n", mValue);
}
~CSingleton()
{
printf("destructor\n");
}
public:
static CSingleton *mInstance;
private:
int mValue;
};
CSingleton *CSingleton::mInstance = new CSingleton();
//CSingleton* CSingleton::instance()
//{
// mInstance = new CSingleton();
//}
int main()
{
return 0;
}
之前理解的访问权限 private 就是:在成员函数内调用private的都没问题,在类外部调用就会导致编译错误,但第一眼看到如上面的代码:CSingleton *CSingleton::mInstance = new CSingleton(); 这个应该是类外部调用啊,怎么没有编译错误呢?
这里涉及到了类的作用域:private的构造函数限制了调用它的函数只能在类的作用域内,而类的静态成员函数也是属于类的作用域内的,所以可以调用私有的构造函数。所以注释掉的那段代码也是能正常编译通过的。static 成员函数的属性可以参考这里:https://www.geeksforgeeks.org/static-member-function-in-cpp/