在运行时,需要跟踪类的实例数

时间:2012-09-03 17:15:22

标签: c++ oop

  

在运行时,需要跟踪类的实例数。从面向对象的角度来看,您使用以下哪种约定来实现这一目标?

选择

  1. 班级变量(静态成员变量)
  2. 全局变量
  3. 构造
  4. 本地变量
  5. 析构

  6. 选择1是我的选择

    我是对的吗?

    不是作业。

    我是JAVA程序员。但我必须回答C ++问题。

2 个答案:

答案 0 :(得分:5)

有点正确。静态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() {}
}

答案 1 :(得分:0)

这可以通过static成员来实现由于只为该类维护了一个副本,您可以在构造函数中将其增加到跟踪创建的实例数,而不是当前有多少实例可用