C ++実装シングルトン(A)
実装
1.こうしてクラスがプロセスによって、コンストラクタを呼び出すクラスのクラスインスタンスの外に作成することができないことを保証するコンストラクタ、デストラクタの民営化は、唯一のクラス定義内で作成することができます。
クラスのポインタ変数を指すクラス定義静的内では、ptr
クラスを作成し、クラスが初期化される外インスタンスを維持する責任、nullptr
。
3.クラス内のオブジェクトをインスタンス静的、およびオブジェクトの破壊のための方法を定義します。コンストラクタ、場合にptr
されnullptr
、オブジェクトを作成するために、ヒープ上で実行、または直接バックポインタに、オブジェクト破壊の方法、ポインタがヌル、アプリケーションスタック空間を回復するため、次にデストラクタない場合。
コードは以下の通りであります:
class Singleton {
public:
static Singleton* getInstance() {
if(nullptr == ptr) {
cout << "getInstance()" << endl;
ptr = new Singleton() //调用构造函数对对象进行实例化
}
return ptr; //返回指向该对象的指针
}
static void destory() {
if(ptr) {
delete ptr; // 回收堆空间
ptr = nullptr; // 防止野指针
}
}
private:
Singleton() { //构造函数
cout << "Singleton()" << endl;
}
~Singleton() { //析构函数
cout << "~Singleton()" << endl;
}
static Singleton* ptr; //指向该对象的指针
};
Singleton* Singleton::ptr = nullptr; //静态对象在类外进行初始化