私は、特定のオブジェクトが破壊されたかどうかを判断するより良い方法を見つけることを試みてきました(destroy(...)
)。私はそれをやってきた道はそうのようなものです:オブジェクトが破壊されたかどうかを判断するための慣習的な方法
class C {
bool valid = false;
this(){
valid = true;
}
}
その後、あなたは:
はC c = new C;
c.valid.writeln // true
destroy(c);
c.valid.writeln // false
if(c !is null && !c.valid) c = null;
私は(おそらく誰かがそれと間違って何か他のものを私に伝えることができますこれで間違って何も表示されません。 )それはメモリを占有し、各コンストラクタにvalid = true;
を入れる必要があります(破壊されたオブジェクトからの変数を使用するため、醜いです)。もちろん、最良のケースは、オブジェクトが有効かどうかを伝えるだけの魔法の機能を持つことです。valid(c); // true/false
。
私の質問は、オブジェクトが破壊されたかどうかを判断するための標準的な方法があるかどうかです(gcはそのメモリ位置を収集せず、有効なオブジェクトはvtableへの参照なしにその場所に座っています)ポインタが今では事実上ぶら下がっていますか?二次質問としてこれを行うには良い方法がない場合:この方法は予見可能な方法で危険ですか?
以前は、オブジェクトA - > Bの各リファレンスについて参照B - > Aがあり、破壊Aのデストラクタを適用するとAのBの参照が無効になったことを確認しました。破壊されました。ただし、破壊可能なクラス(A)と参照クラス(B)の両方を変更する必要があるため、新しいタイプの参照を追加する場合は非常に退屈で時間がかかります。理論的には、これはプログラムの参照グラフ(またはそのようなもの)の中に常に決定可能なサイクルを持つようなものです。潜在的に非常に興味深いテーマです。
私がばかだと申し訳ありません。
あなたのアプローチは合理的にわかります。 –