在运行时,需要跟踪类的实例数。从面向对象的角度来看,您使用以下哪一种约定来实现这一点?
选择
- 类级变量(静态成员变量)
- 全局变量
- 构造函数
- 局部变量
- 析构函数
选择1是我的选择
我对吗?
不是作业。
我是一名 JAVA 程序员。但我必须回答 C++ 问题。
有点对。静态 WeakHashMap 和将自身放入地图的构造函数可以完成这项工作。每次调用 size() 时,它都会检查哪些对象已被 gc'ed。
更多oop(我想)方法是使用静态工厂方法,例如:
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
成员来实现因为只为类维护一个副本,并且您可以在构造函数中增加相同的副本以跟踪创建的实例数,而不是当前可用的实例数