激しく間違えた。>>31は無し。

type
TMyObject = class constructor Create; virtual; end;
TMyObject2 = class(TMyObject) constructor Create; override; end;
TMyClass = class of TMyObject

function CreateObject(MyClass: TMyClass): TObject;
begin
 Result := MyClass.Create;
end;

とするときvirtual/overrideがあればCreateObject(TMyObject), CreateObject(TMyObject2)は
それぞれ期待したインスタンスを生成できるが
なければ両方とも基底クラスであるTMyClassのインスタンスが生成されてしまう。

だから判断基準はクラス参照経由でコンストラクタが呼ばれる可能性があるかどうか。ということ。
実際にはclass of でクラス参照を定義したクラスのコンストラクタをvirtualにすればいい。