• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#において、同じインスタンスを何度もnewしてよいでしょうか。)

C#で同じインスタンスを何度もnewしてよいでしょうか?

このQ&Aのポイント
  • C#で同じインスタンスを何度もnewすることは可能ですが、新しいインスタンスが生成されるたびに前のインスタンスはガベージコレクタによって破棄されます。
  • 上記のコードにおいて、最初と2番目のnewしたインスタンスは、ガベージコレクタによっていずれ破棄されると考えて良いでしょう。
  • また、宣言から書きなおしている場合では、新しいインスタンスが生成されるたびにメモリが確保され、前のインスタンスはガベージコレクタによって破棄されます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

すいません、「同じメソッド内に同じ変数名を再度宣言することはできません」は「同じスコープ内に・・・」の誤りでした。 ループの中で A a = new A(); とした場合は、ループが1回終わるごとにループ内のローカル変数はガベージコレクタで破棄する対象となるため、1回目のループのときのaと2回目のループのときのaは別物になります。ループによってメモリは一方的に使用量が増加してくわけではなく、あるタイミングで破棄対象のインスタンスが解放されるようになります。

nick_2010
質問者

お礼

よくわかりました。 回答ありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

1: A a = new A(); 2: a = new A(); 1で作成されたインスタンスはaという変数で参照することができます。 2で新たなインスタンスを作ってaという変数で参照することができるようになります。1で作成されたインスタンスを参照できる変数はなくなりますので、いずれガベージコレクタによって破棄されます。 1: A a = new A(); 2: A a = new A(); 同じメソッド内に同じ変数名を再度宣言することはできませんよ。「ローカル変数 'a' はこのスコープで既に定義されています。」というコンパイルエラーが出るはずです。 同じ変数で違うインスタンスを参照させることについては問題ありません。ただ、変数の使い回しがコードのメンテナンス性、可読性の面でいいかというと、「???」です。ご質問とは別の問題ですが、気をつけたほうがいいと思います。

nick_2010
質問者

お礼

回答ありがとうございます。 2つ目のコードについては、おっしゃるとおり2つ宣言はできないみたいですね。 ただ、ループの中に「A a = new A();」 と宣言を入れた場合、メモリ的にはどうなるのでしょうか。(もしかしてこれもできない!?) よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A