適切なメモリ管理を使用した C のシングルトン パターン
シングルトン パターンは、クラスのインスタンスを 1 つだけ作成できるようにします。多くのアプローチが存在しますが、一般的な方法は、静的ポインターを使用してインスタンスの作成と破棄を管理することです。ただし、エラーを防ぐためにメモリ管理ルールに従うことが重要です。
この例:
<code class="cpp">class A { static A* m_pA; A(); ~A(); static A* GetInstance(); static void FreeInstance(); void WORK1(); void WORK2(); void WORK3(); }; A* A::GetInstance() { if (m_pA == NULL) m_pA = new A(); return m_pA; } A::~A() { FreeInstance() // Don't write this here } void A::FreeInstance() { delete m_pA; m_pA = NULL; }</code>
デストラクターを使用してシングルトンを手動で解放するのは間違っています。インスタンスへの外部参照が存在する場合、それを途中で削除するとクラッシュが発生します。
代わりに、より良いアプローチを採用してください。
<code class="cpp">class A { static A* m_pA; explicit A(); void A(const A& a); void A(A &a); const A& operator=(const A& a); ~A(); static A* GetInstance(); static void FreeInstance(); void WORK1(); void WORK2(); void WORK3(); }; A* A::GetInstance() { if (m_pA == NULL){ static A self; m_pA = &self; } return m_pA; } A::~A() { }</code>
ここでは、静的インスタンスは、コンパイラにより、適切なメモリ管理が保証されます。さらに、暗黙的な型変換を防ぐためにコンストラクターを明示的としてマークし、コピー コンストラクターと代入演算子をプライベートにして、望ましくないオブジェクトの重複を禁止します。
以上がC シングルトン実装で適切なメモリ管理を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。