深いクラス階層の基本クラスにクラス変数を追加しました。クラスタイプごとに作成されたインスタンスの数をカウントするための整数です。しかし、私は問題に遭遇しました。
例を考えると:
TBaseClass = class
private
class var fCreated: integer;
public
class function NewInstance: TObject; override;
end;
TDescendant = class(TBaseClass)
end;
...
class function TBaseClass.NewInstance: TObject;
begin
result := inherited NewInstance;
inc(fCreated);
end;
クラス var を使用して、クラスごとに作成されたインスタンスの数を格納できると想定しましたが、そうではないようです。
検査TBaseClass.fCreated
すると と同じ値が返されTDescendant.fCreated
、インスペクターを介して一方を変更すると他方が変更されるためfCreated
、単一のグローバル変数であるかのように動作します。
fCreated
クラスタイプごとに維持されると思っていましたが、それがポイントではありませんか? 何が欠けていますか?