静态成员经典应用 – 单例模式
- 1.把构造函数私有化
- 2.定义一个私有的静态成员变量指针,用于指向单例对象
- 3.提供一个公共的返回单例对象的静态成员函数
class Rocket {
// 提供一个公共的返回单例对象的静态成员函数
public:
static Rocket * sharedRocket() {
// 严格的来说,这里需要加锁,如果多线程创建单例可能会创建多个对象
if (ms_rocket == NULL) {
ms_rocket = new Rocket();
}
return ms_rocket;
}
// 定义一个私有的静态成员变量指针,用于指向单例对象
static Rocket *ms_rocket;
// 把构造函数私有化
private:
Rocket() {
cout << "Rocket()" << endl;
}
};
// 初始化静态成员变量
Rocket *Rocket::ms_rocket = NULL;
访问单例,都是同一个地址
int main() {
Rocket *p1 = Rocket::sharedRocket();
Rocket *p2 = Rocket::sharedRocket();
Rocket *p3 = Rocket::sharedRocket();
Rocket *p4 = p3->sharedRocket();
cout << p1 << endl;
cout << p2 << endl;
cout << p3 << endl;
cout << p4 << endl;
getchar();
return 0;
}
野指针:指向了被释放的内存