プロが教える店舗&オフィスのセキュリティ対策術

はじめまして。
いつも色々と質問を読まさせて頂いています。

早速タイトルの質問についてですが、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();
.
.
とやれば別アドレスの参照となることは分かったのですが。。。

初歩的な質問だと思いますが、お知恵をお借りできればと思います。
よろしくお願いします。

A 回答 (1件)

&obj だから、インスタンスじゃないです。

MyObject *型の変数objが格納されているアドレスが出力されています。
newで生成されたインスタンスのアドレスなら obj です。

printf("%p¥n", &intX);
こっちも同様に、int型の変数intXが格納されているアドレスです。
さらに、intはクラスでく只の値なので、インスタンスは作られません。


C/C++のメモリ関係は、他の高級言語に比べると、かなりCPU寄りです。
ポインタについて、もっと勉強するのがいいと思います。
    • good
    • 0
この回答へのお礼

kmeeさん、返信ありがとうございます。

>MyObject *型の変数objが格納されているアドレスが出力されています。
そうでした。。
ポインタ変数のアドレスでした。

>ポインタについて、もっと勉強するのがいいと思います。
はい、もっと勉強します。

ありがとうございます!

お礼日時:2013/05/09 21:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!