【C++】設計モード全解析——単例モード(code c++)
目次&索引単例モード プログラムコード 怠け者式実現:lock、スレッド安全code c++ 餓漢式実現:スレッド安全code c++
結論 単一モード
クラスにインスタンスが1つしかないことを保証し、そのグローバル・アクセス・ポイントにアクセスします.の主な解決:グローバルに使用されるクラスが頻繁に作成され、破棄されます. いつ使用するか:インスタンスの数を制御し、システムリソースを節約したい場合. は、システムに単一のインスタンスが存在するかどうかを判断し、存在する場合は戻り、存在しない場合は作成します. キーコード:デフォルトの構築プライベート、コピー構築プライベート(delete注意). 単例の実現は主に2種類ある:怠け者式と餓漢式怠け者:だから名は意味を考えて、やむを得ず実例化類に行かないで、つまり初めて類の実例を使う時やっと実例化に行くので、上の経典の方法は怠け者の実現に帰されます. 餓漢:お腹が空いたら必ずお腹が空いて食べ物を選ばない.したがって,単例クラス定義の際にインスタンス化する.
特徴と選択:はアクセスが少なく、怠け者で実現しています.複雑さを実現するには、スレッドの安全を保証します.これは時間で空間を変えます. スレッド同期を行うため、アクセス量が大きい場合や、アクセスするスレッドが多い場合は、餓漢で実現し、より良い性能を実現することができます.これは空間で時間を変えます.
プログラムコード
怠け者式実現:lock、スレッドセキュリティcode c++
餓漢式実現:スレッド安全code c++
結論
コード例、問題メッセージがあります.
クラスにインスタンスが1つしかないことを保証し、そのグローバル・アクセス・ポイントにアクセスします.
特徴と選択:
プログラムコード
怠け者式実現:lock、スレッドセキュリティcode c++
#include
#include
using namespace std;
class SingleInstance {
public :
static SingleInstance *getInstance() {
// , 1 , 2
if (single == nullptr) {
//
unique_lock<mutex> lock(Instance_mutex); // ,
if (single == nullptr) {
single = new SingleInstance();
}
}
return single;
}
private:
SingleInstance(); //
SingleInstance(const SingleInstance &) = delete; //
static SingleInstance *single;
static mutex Instance_mutex;
};
SingleInstance *SingleInstance::single = nullptr; //
mutex SingleInstance::Instance_mutex;
int main() {
// ,
SingleInstance *s1 = SingleInstance::getInstance();
return 0;
}
餓漢式実現:スレッド安全code c++
#include
using namespace std;
class SingleInstance {
public :
static SingleInstance *getInstance() {
// , 1 , 2
return single;
}
private:
SingleInstance(); //
SingleInstance(const SingleInstance &) = delete; //
static SingleInstance *single;
};
SingleInstance *SingleInstance::single = nwe SingleInstance(); // single
int main() {
// ,
SingleInstance *s1 = SingleInstance::getInstance();
return 0;
}
結論
コード例、問題メッセージがあります.