実行時に、クラスのインスタンス数を追跡する必要があります。オブジェクト指向の観点から、これを達成するために次の規則のどれを使用しますか?
選択肢
- クラスレベル変数(静的メンバ変数)
- グローバル変数
- コンストラクタ
- ローカル変数
- デストラクタ
選択肢1は私の選択です
私は正しいですか?
宿題ではありません。
私は Java プログラマーですが、C++ の質問に答えなければなりませんでした。
やや正しい。静的な WeakHashMap と、自分自身をマップに入れるコンストラクターがその仕事をすることができます。size() を呼び出すたびに、GC されたオブジェクトをチェックします。
もっとおっと(私が思うに)方法は、次のような静的ファクトリメソッドを使用することです:
class Trackable {
private static WeakHashMap<Trackable, Object> map = new WeakHashMap<>();
private static final Object dummy = new Object();
public static Trackable newInstance() {
Trackable instance = new Trackable();
map.put(instance, dummy);
return instance;
}
public static int getTrackedObjectSize() {
return map.size();
}
private Trackable() {}
}
static
これはメンバーによって実現できます。クラスに対して 1 つのコピーのみが維持され、コンストラクターで同じコピーをインクリメントして、現在使用可能なインスタンスの数ではなく、作成されたインスタンスの数を追跡できるためです。