13,009
回編集
編集の要約なし |
|||
| 160行目: | 160行目: | ||
* nullポインタチェックが不要 | * nullポインタチェックが不要 | ||
* デストラクタの明示的実装が不要 | * デストラクタの明示的実装が不要 | ||
* 遅延初期化 (lazy initialization) の実現 | |||
* より安全で簡潔な実装 | * より安全で簡潔な実装 | ||
<br> | <br> | ||
| 166行目: | 167行目: | ||
{ | { | ||
private: | private: | ||
Singleton() = default; | Singleton() = default; // プライベートコンストラクタ (外部からのインスタンス化を防止) | ||
public: | public: | ||
Singleton(const Singleton&) = delete; | Singleton(const Singleton&) = delete; // コピーコンストラクタを削除 (シングルトンの複製を防止) | ||
Singleton& operator=(const Singleton&) = delete; | Singleton& operator=(const Singleton&) = delete; // 代入演算子を削除 (シングルトンの代入を防止) | ||
// C++11以降では、静的局所変数の初期化はスレッドセーフであることが保証されている | |||
static Singleton& getInstance() | static Singleton& getInstance() | ||
{ | { | ||
static Singleton instance; | static Singleton instance; // マルチスレッド環境でも安全 | ||
return instance; | return instance; | ||
} | |||
// ビジネスロジックメソッド | |||
void sampleMethod() | |||
{ | |||
// ...略 | |||
} | } | ||
}; | }; | ||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// 使用例 | |||
#include <iostream> | |||
int main() | |||
{ | |||
// インスタンスの取得 | |||
Singleton& instance1 = Singleton::getInstance(); | |||
Singleton& instance2 = Singleton::getInstance(); | |||
// 同じインスタンスであることを確認 | |||
if (&instance1 == &instance2) { | |||
std::cout << "同じインスタンスです" << std::endl; | |||
} | |||
// ビジネスロジックの実行 | |||
instance1.sampleMethod(); | |||
return 0; | |||
} | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||