3

厳密に言うとわかりませんが、shared ptr をガベージ コレクションの戦略として扱いたいと思います。

ここで 2 つの質問があります。

  1. ガベージ コレクションに適した共有 ptr の場合は、次のようになります。マークスイープなどの他の戦略はいつですか?
  2. Cにlibが実装された共有ptrはありますか?

ありがとう。

4

2 に答える 2

3

C でガベージ コレクションが必要な場合は、Hans Boehmガベージ コレクション ライブラリを参照してください。

共有 ptr を使用すると、オブジェクトの削除を処理する必要性がほとんどなくなりますが、いくつかの複雑な問題があります。一度に 1 つの共有ポインターしかポインターを保持できません。Boost の smart_ptr ポインター処理と関連クラスも参照してください。

ただし、shared_ptr と Boost は C++ です。これを C で実現するには苦労するでしょう。shared_ptr は、その魔法を実現するために演算子のオーバーロードに依存しています。演算子のオーバーロードがなければ、誰かがどこかでポインターのコピーを保持しているかどうかを知る方法がありません。(これは C++ でも問題ですが、コード全体で shared_ptr を使用すると、演算子のオーバーロードによってリスクが軽減されます。)

代わりにハンス・ベームを絶対にお勧めします。

于 2012-05-07T07:48:48.763 に答える
2

これについて語っている良い記事がいくつかあります。

ガベージ コレクションの概要、および C++

前 StackOverflow に関する同様の質問:ガベージ コレクションと共有ポインター

また、scoped_ptr を調べることをお勧めします。違いは次のとおりです: shared_ptr と scoped_ptr

于 2012-05-07T07:49:25.170 に答える