08/06/18 17:24:12
ii_intl.ilが参照でもポインタでもないから、
setilの中では、iからilへ値がコピーされている。
145:デフォルトの名無しさん
08/06/18 17:24:59
deleteってのはオブジェクトをもう使わない、とシステムに返す命令。
中身をクリアするわけじゃない。
直後に i を参照すれば、その間に何の処理も行われないからメモリ上は前の値が残っている。
それを参照しているだけ。
いつどのタイミングで、このiの値が書き換えられるかは、誰にも予想できない。
146:デフォルトの名無しさん
08/06/18 17:26:08
げ、恥ずかしい。
144のいうとおりだった。
145は早とちり。
147:143
08/06/18 17:35:28
レスありがとうございます。
クラスintlの定義を変えて
class intl{
public:
int *il;
void setil(int &i){*il=i;}
};
とした場合はやはりdelete後もilが残り、
class intl{
public:
int *il;
void setil(int &i){il=&i;}
};
とした場合はdeleteによってilも消えるようです。
>>144によれば、iが参照渡しでかつilがポインタであっても
*il = i;
の場合はiのコピーが渡されるということのようですね…。
この場合、il自身はインスタンスi_intlが消えるまで生き残るということですよね?
うーん、ややこしい気がする…。
148:143
08/06/18 17:35:56
sage忘れすみません。
149:デフォルトの名無しさん
08/06/18 17:58:20
> int *il;
> void setil(int &i){*il=i;}
初期化してないポインタ il が指す場所に値を入れてるのでダメ。
150:デフォルトの名無しさん
08/06/18 18:58:58
参照をポインタと似たようなもんだと思っていたら訳ワカメになるよ。
どうやらポインタのほうも理解していないようなので、
まずポインタとメモリの動的確保をきっちり勉強したほうがいいね。
151:デフォルトの名無しさん
08/06/18 20:19:58
巷じゃMozilla Firefox 3.0の話題でもちきりだが、4.0世代はC++で開発するんだな・・・
152:デフォルトの名無しさん
08/06/18 20:20:52
いまままではCC??
153:デフォルトの名無しさん
08/06/18 20:45:48
memcpyは第三引数が0であっても正常に動作する事が保証されていますか?
154:デフォルトの名無しさん
08/06/18 22:06:29
規格に 0 だとダメとか特に書いてないから 0 でも大丈夫。
155:デフォルトの名無しさん
08/06/18 22:07:42
派生の質問だけど、第3引数が 0 で第1第2引数が NULL の場合はどうなんだろ。
memcpy の規格には領域が重なってるときは未定義ってことしか書いてないけど・・・。
156:デフォルトの名無しさん
08/06/18 22:10:46
そういや、いつの間にか規格が文書内検索できるようになってた。
結構文句きてたんだろうな。
157:デフォルトの名無しさん
08/06/18 22:22:31
Foxit Readerで見れなくなっちまった。