ホームページ >バックエンド開発 >C++ >C シングルトン実装で適切なメモリ管理を実現するにはどうすればよいですか?

C シングルトン実装で適切なメモリ管理を実現するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 17:16:031054ブラウズ

How to Achieve Proper Memory Management in C   Singleton Implementation?

適切なメモリ管理を使用した 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&amp; a);
    void A(A &amp;a);
    const A&amp; operator=(const A&amp; 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 = &amp;self;
    }
    return m_pA;
}

A::~A() {
}</code>

ここでは、静的インスタンスは、コンパイラにより、適切なメモリ管理が保証されます。さらに、暗黙的な型変換を防ぐためにコンストラクターを明示的と​​してマークし、コピー コンストラクターと代入演算子をプライベートにして、望ましくないオブジェクトの重複を禁止します。

以上がC シングルトン実装で適切なメモリ管理を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。