
C#において、同じインスタンスを何度もnewしてよいでしょうか。
(インターネットで探したんですが、意外に見つからなかったもので質問させていただきました。)
例えば
A a = new A();
//なにかしら処理
a = new A();
//なにかしら処理
a = new A();
//なにかしら処理
と書いた場合、最初と2番目のnewしたインスタンスは、ガベージコレクタによっていずれ破棄されると考えてよろしいでしょうか。
また上記のコードを
A a = new A();
//なにかしら処理
A a = new A();
//なにかしら処理
A a = new A();
//なにかしら処理
のように、宣言から書きなおしている場合では、どのような違いがあるのでしょうか。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
すいません、「同じメソッド内に同じ変数名を再度宣言することはできません」は「同じスコープ内に・・・」の誤りでした。
ループの中で A a = new A(); とした場合は、ループが1回終わるごとにループ内のローカル変数はガベージコレクタで破棄する対象となるため、1回目のループのときのaと2回目のループのときのaは別物になります。ループによってメモリは一方的に使用量が増加してくわけではなく、あるタイミングで破棄対象のインスタンスが解放されるようになります。
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' はこのスコープで既に定義されています。」というコンパイルエラーが出るはずです。
同じ変数で違うインスタンスを参照させることについては問題ありません。ただ、変数の使い回しがコードのメンテナンス性、可読性の面でいいかというと、「???」です。ご質問とは別の問題ですが、気をつけたほうがいいと思います。
回答ありがとうございます。
2つ目のコードについては、おっしゃるとおり2つ宣言はできないみたいですね。
ただ、ループの中に「A a = new A();」
と宣言を入れた場合、メモリ的にはどうなるのでしょうか。(もしかしてこれもできない!?)
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
CloseとDisposeの違い
Visual Basic(VBA)
-
C# インスタンスの破棄
その他(プログラミング・Web制作)
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
-
4
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
5
同じ配列またはクラスを、2回以上newしたとき
Java
-
6
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
7
C# ReadOnlyのTextBoxで
C言語・C++・C#
-
8
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
9
private static という変数の修飾
Java
-
10
DataGridViewに空白がある場合はエラーにしたい
Visual Basic(VBA)
-
11
複数の変数を宣言する時、同時に初期化?できないでしょうか?
Java
-
12
別のフォームで記述している関数を実行するには?C#
C言語・C++・C#
-
13
C# Listを使わずに2次元配列の動的確保をしたいです。
C言語・C++・C#
-
14
C# 超初心者です。 this.Refresh();という文を使いたいです
C言語・C++・C#
-
15
C#で構造体の配列を持った構造体を使いたいのですが
C言語・C++・C#
-
16
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
17
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
18
例外処理のフローチャートの記述方法
C言語・C++・C#
-
19
変数名の付け方
Java
-
20
「小数点第2位まで表示」というのは正しいでしょうか
数学
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
変数名の付け方
-
生成したインスタンスを削除す...
-
複数の変数を宣言する時、同時...
-
C#のメモリ解放についてご教授...
-
VB6からのExcel起動について
-
C#「オブジェクト参照が必要で...
-
C# インスタンスの破棄
-
インスタンスを同じ名前で作成...
-
サーブレットでレスポンスが返...
-
vb.netでFAXを送信する方法
-
javaのthisについて質問です。e...
-
VB.NET Form1からForm2を開い...
-
フォームの存在をチェックする方法
-
VB.NET Newしたものを変数に代...
-
非staticフィールドを参照でき...
-
リアルタイム波形表示
-
String a = "a"; と String b =...
-
C# クラスのインスタンスについて
-
メソッドの引数としてのthisの意味
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
private static という変数の修飾
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
インスタンス参照でアクセスで...
-
生成したインスタンスを削除す...
-
オブジェクト参照がオブジェク...
-
C#において、同じインスタンス...
-
C# インスタンスの破棄
-
変数の参照でエラーが出てしま...
-
インスタンスを同じ名前で作成...
-
VB.NET getとsetの概念がわかり...
-
newしないインスタンス?実体化...
-
javaのクラスの作り方、エラー...
-
非staticフィールドを参照でき...
-
「インスタンス」の意味をわか...
-
[Visual C#] 優先される処理に...
-
フォームの存在をチェックする方法
-
大量のデータとインスタンスの...
-
C#「オブジェクト参照が必要で...
-
String a = "a"; と String b =...
おすすめ情報