
はじめまして。
いつも色々と質問を読まさせて頂いています。
早速タイトルの質問についてですが、for文の中でループさせながらインスタンスを生成しようとしています。
for (int i=0; i<10; i++) {
MyObject *obj = new MyObject();
int intX = new int(100);
// メモリのアドレスを確認
printf("%p¥n", &obj);
printf("%p¥n", &intX);
}
この結果、
0xbfffd7dc
0xbfffd7f0
0xbfffd7dc
0xbfffd7f0
0xbfffd7dc
0xbfffd7f0
0xbfffd7dc
0xbfffd7f0
.
.
のようになり、どうも同じメモリアドレスを参照したインスタンスが生成されているようです。
やりたい事は、10回のインスタンスの生成をforで手抜きして行いたいのですが、この方法ですとすべて同じインスタンスとなってしまい、
別の処理でとある一つのインスタンスに変更を加えると、すべてのインスタンスにも変更がかかってしまいます。
これを実現する方法はあるのでしょうか。
解決方法として、forを使わずに、
MyObject *obj1 = new MyObject();
MyObject *obj2 = new MyObject();
.
.
とやれば別アドレスの参照となることは分かったのですが。。。
初歩的な質問だと思いますが、お知恵をお借りできればと思います。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
&obj だから、インスタンスじゃないです。
MyObject *型の変数objが格納されているアドレスが出力されています。newで生成されたインスタンスのアドレスなら obj です。
printf("%p¥n", &intX);
こっちも同様に、int型の変数intXが格納されているアドレスです。
さらに、intはクラスでく只の値なので、インスタンスは作られません。
C/C++のメモリ関係は、他の高級言語に比べると、かなりCPU寄りです。
ポインタについて、もっと勉強するのがいいと思います。
kmeeさん、返信ありがとうございます。
>MyObject *型の変数objが格納されているアドレスが出力されています。
そうでした。。
ポインタ変数のアドレスでした。
>ポインタについて、もっと勉強するのがいいと思います。
はい、もっと勉強します。
ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
複数の変数を宣言する時、同時...
-
変数名の付け方
-
[Visual C#] 優先される処理に...
-
「インスタンス」の意味をわか...
-
C#において、同じインスタンス...
-
変数の参照でエラーが出てしま...
-
VB.NET)ボックスからラベルにデ...
-
他のファイルの変数参照
-
private static という変数の修飾
-
参照渡し
-
SerialPort処理でInvokeメソッ...
-
SQLを連続発行する時の正しい(?...
-
抽象クラスのインスタンス生成...
-
VB.NET Newしたものを変数に代...
-
インスタンスのハンドル
-
JAVA タートルグラフィック ...
-
フィールドでのnewとコンストラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
private static という変数の修飾
-
複数の変数を宣言する時、同時...
-
インスタンス参照でアクセスで...
-
C#において、同じインスタンス...
-
C# インスタンスの破棄
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
「インスタンス」の意味をわか...
-
フォームの存在をチェックする方法
-
生成したインスタンスを削除す...
-
変数の参照でエラーが出てしま...
-
文字列を日付に変換でParseExce...
-
javaのクラスの作り方、エラー...
-
newしないインスタンス?実体化...
-
インスタンスを同じ名前で作成...
-
VB6.0で、DLLを動的に参照したい
-
データベースから日付型を取得...
-
C#のメモリ解放についてご教授...
-
SQLを連続発行する時の正しい(?...
おすすめ情報