オブジェクトが初期化されているかどうかを確認する必要があることはわかっていますが、isassigned を使用できるかどうかはわかっていますが、現時点ではジェネリック リスト TList では機能しないことがわかりました。isassigned は常に true を返しますが、それは間違っています。それで解決策は何ですか?
2 に答える
型のオブジェクト参照変数はTList<T>
、他のオブジェクト参照と何ら変わりはありません。Assigned
他のオブジェクト参照変数と同じように使用します。
Assigned
は、 に初期化されたオブジェクト参照変数の初期化のみをテストできることに注意してくださいnil
。
たとえば、クラス インスタンス メンバーはnil
、インスタンスのコンストラクターが実行を開始する前に初期化されます。への呼び出しで割り当てられたオブジェクト参照は、New
に初期化されnil
ます。または、への割り当てでデフォルト値に設定されたものDefault()
。
ただし、ローカル変数であるオブジェクト参照変数は に初期化されませんnil
。実際、それらはまったく初期化されていません。への呼び出しによって割り当てられるオブジェクト参照変数についても同様ですGetMem
。
肝心なのは、タイプのオブジェクト参照変数TList<T>
または実際には他のジェネリック クラスの処理は、他のTObject
子孫の処理と同じであるということです。
Delphi では、オブジェクトを作成すると、構築シーケンスの一部として初期化されます。
classname.alloc.init
メモリの割り当てとデータの初期化が分割されている ObjC とは異なり、Delphi ではすべてclassname.Create
呼び出し内で行われます。
したがって、コンストラクターからオブジェクト アドレスを受け取っている限り、オブジェクトは割り当てられ、初期化されます。