3

私は今、boehm gc c++ インターフェイスを学んでいます。それを扱っていない、ただ興味があるだけです。そして、私は公式の例に従い、GC される可能性のあるクラスをデストラクタに書きます。出力があるので、インスタンスが GC であるかどうかを知ることができます。ただし、ループを使用して 1,000 個以上のインスタンスを作成した場合に限り、gc コレクションをトリガーできます。コードが次のように単純な場合:

class test_gc : public gc
{
public:
    ~test_gc()
    {
        cout << "~test_gc()" << endl;
    }
};

int main()
{
    GC_INIT();
    ::new (GC) test_gc();
    GC_gcollect();
    return 0;
}

デストラクタが呼び出されないようです。「~test_gc()」は出力されません。また、コンパイラの最適化はオフになっています。私はいくつかのグーグルを行いましたが、公式の例以外はほとんど何も見つかりませんでした。

プログラムを終了する前に gc コレクションを強制する方法を教えてください。または、間違って使用した場合に正しい方法で使用する方法を教えてください。どうもありがとう。

4

3 に答える 3

0

@Shafik のリンク先の記事から:

Boehm コレクタが自動的に呼び出すデストラクタを持つ新しいクラスが必要な場合は、Boehm コレクタのクラス gc_cleanup をサブクラス化できます。インスタンスのメモリをリサイクルする直前に、Boehm コレクタがデストラクタを呼び出すように調整する点を除いて、クラス gc に似ています。すべてのインスタンスがリサイクルされるという保証はないことに注意してください。

于 2013-05-29T02:59:01.187 に答える