Delphiのヘルプでコンストラクタについて
>コンストラクタの実行中に例外が生成された場合,Destroy デストラクタが
>自動的に呼び出されて未完成のオブジェクトが廃棄されます。

とあります。では、例外を使わずに、自前で解放する方法は無いかという事ですが
残念ながら良い方法はありません。

コンストラクタ内で free してしまっても
帰り値はfreeする前に一時的に生成されたアドレスが帰ってしまいます。
ではそれを無理やりnilにする方法は無いかという事になります。
例えば self:=0; としてしまうとどうでしょう?
そうすると、AfterConstructionという仮想関数の呼び出しが失敗します

無理やりの方法として調べた範囲内では
procedure AfterConstruction;override;
 とコンストラクタ呼び出し後の処理を継承して、この中でfreeした上で
asm
 mov esi,0
end;
とやれば、なんとか誤魔化せそうですが・・・・・ とりあえず例外使いましょう

例外でIDEが止まるの嫌なら Abortを使うとよいでしょう