5

私は C++ でガベージ コレクターを作成しようとしてきました。これを私のすべての基本クラスとして設計しました。このクラスは、garbageCandidate へのポインターを含む静的ベクターを保持し、すべての GarbageCollector インスタンスがベクターに「this」をプッシュします。 .

次に、静的関数が来て、静的ベクトル内のすべてのポインターを削除します。

削除機能 (最初のポインターの削除) の最初で、削除が無効なポインターで使用されたことを示すエラーが表示されます...

これは静的/動的バインディングと関係がありますか? つまり、「父」クラスで削除を呼び出し、実際には子であるため、削除演算子は期待どおりに動作できませんか?

これを回避する方法は、仮想デストラクタを作成することでしょうか? (または仮想削除機能)?

または私は何かを完全に逃しましたか?

ps:動的に作成されたテストに使用されるすべてのオブジェクト。

4

2 に答える 2

0

独自の GC をローリングするのではなく、Boehm Conservative GCまたはスマート ポインターを使用する必要があると思います。どちらも完璧ではありません:

それにもかかわらず、Boehm GC またはスマート ポインターのいずれかは、独自のソリューションを展開するよりも実装と保守の労力が少なくなります。

于 2013-04-09T22:59:13.453 に答える