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

Barbara Streisand
リリース: 2024-11-03 17:16:03
オリジナル
978 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!