sp1章. 一つしかないことが保証できるsingletonにあるコードは現状のコードは以下のようになっています。
CODE:
/***** Singleton.h ******/
#pragma once
class Singleton {
private:
Singleton(){}
Singleton(const Singleton& r){}
Singleton& operator=(const Singleton& r){}
public:
static Singleton* Instance() {
static Singleton inst;
return &inst;
};
const char* get(){
return "singleton";
}
};
となっていますが、C++11(Visual Studio 2013)の機能を使って実装すると以下の実装が簡単になります(
コンパイラが生成する関数へのdefault/delete指定(ウィキペディア記事))。
CODE:
/***** Singleton.h ******/
#pragma once
class Singleton {
public:
Singleton() = delete; //これに変更
Singleton(const Singleton& r) = delete; //これに変更
Singleton& operator=(const Singleton& r) = delete; //これに変更
static Singleton* Instance() {
static Singleton* inst;
return inst; //&inst; を inst; に訂正(間違えてました)
};
const char* get(){
return "singleton";
}
};
とするだけでコンパイラはコンストラクタ、デフォルトコンストラクタ、演算子の生成を禁止にすることができます。