静态成员经典应用 – 单例模式

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

野指针:指向了被释放的内存