2016-05-11 12 views

答えて

6

がローカル変数であるとすると、提示されたコードで変数を確定する理由は全くありません。変数がスコープを離れると、すぐに終了します。明示的に行うことによって得られるものは何もありません。

ただし、スコープの範囲が配列の使用よりもかなり長くなる変数があります。これらのシナリオでは、変数が終了したらすぐに変数を確定して、メモリが返されるようにすると便利です。

個人的に私は

MyArray := nil; 

または

私の意見でより容易にファイナライズ文として飛び出す
Finalize(MyArray); 

を好むだろう。あなたの

SetLength(MyArray, 0); 

は、コードをスキミングするときに割り当てられるように見えます。

2

動的配列は、何も参照していないときに自動的に解放されます。

これを手動で行う必要がある場合は、次の方法をお勧めします。これは他の方法よりも明らかです。

MyDynamicArray = nil; 

ゼロ参照の自然環境を設定し、メモリマネージャにその都度、解放させます。

+0

「ベスト」と宣言するのはちょっと強いと思います。あなたは少なくとも2つの選択肢よりも「より良い」理由を正当化することができますか? –

+1

私はあなたの答えを本当に比較しませんでした。動的配列は管理され、何も参照されなければ解放されます。今度は、ポインタをnilに設定すると、手動でリファレンスをオフにします(他のリファレンスがないと仮定して)。だから私は、管理プロセスが自然環境を処理するように設定することが最善であると考えました。 –

+0

@DavidHeffernanこれは、あなたが何をするつもりであるかをより明示的に示しています。実装ではなくセマンティクスを伝えています。この考慮事項の外に、SetLength-0はもちろん同じです。 –

関連する問題