実際に私たちに本当の質問をする必要があります(a) :-)なぜこれが必要だと思うのかは明らかかもしれませんが、ほとんどの場合そうではありません。実際、それはほとんどの場合悪い考えです。言い換えれば、なぜあなたはこれをする必要があると思いますか?
私は通常、開発者がオブジェクトが割り当てられた場所に基づいてオブジェクトを削除するか削除したくないためだと思いますが、それは通常、コード自体ではなく、コードのクライアントに任せるべきものです。
アップデート:
質問で理由を明確にしたので、お詫び申し上げます。おそらく、あなたが求めていることが理にかなっている数少ない領域の1つを見つけたでしょう(独自のガベージコレクションプロセスを実行する)。理想的には、すべてのメモリ割り当て演算子と割り当て解除演算子をオーバーライドして、ヒープから作成および削除されたものを追跡します。
delete
ただし、呼び出されない状況が発生する可能性があり、マーク/スイープは参照カウントに依存するため、ポインタの割り当てをインターセプトできる必要があるため、クラスの新規/削除をインターセプトするのは簡単なことではありません。それが正しく機能するために。
あなたはそれをどのように扱うつもりかについて考えましたか?
古典的な例:
myobject *x = new xclass();
x = 0;
削除呼び出しは発生しません。
また、インスタンスの1つへのポインターがスタック上にあるという事実をどのように検出しますか?newとdeleteをインターセプトすると、オブジェクト自体がスタックベースかヒープベースかを保存できますが、特に次のようなコードでは、ポインターがどこに割り当てられるかを判断する方法がわかりません。
myobject *x1 = new xclass(); // yes, calls new.
myobject *x2 = x; // no, it doesn't.
おそらく、手動のメモリ管理を時代遅れにするのに大いに役立つC++のスマートポインタを調べたいと思うかもしれません。共有ポインター自体は、循環依存のような問題に悩まされる可能性がありますが、弱ポインターを適切に使用することで、それを簡単に解決できます。
シナリオでは、手動のガベージコレクションが不要になった可能性があります。
(a)これはとして知られていX/Y problem
ます。多くの場合、人々はあるクラスの解決策を前提とする質問をしますが、より良いアプローチは、最良の解決策が何であるかについての先入観なしに問題を説明することです。