もとはこんな感じです。
Hoge *hoge = new Hoge();
hoge ->foo();
vec.push_back(*hoge);
たぶん原因は下記二点
要素数が自動的に変更されると書きましたが、vector はある程度の個数分の領域を事前に一括で確保しておき、 それが足りなくなったとき(新たに要素を追加しようとして、足りなかったとき)に、領域を拡張するのです。
http://www.geocities.jp/ky_webid/cpp/library/002.html
vector は、配列の長さを増加させた場合、要素の参照や、要素を指すポインタは、無効になる、と覚えておきましょう。
http://homepage2.nifty.com/well/STL.html
そもそもC++が全然わかっていない。
【追記】解決しました。
サンプルコードの正誤表を見たらあっさり訂正が書いてありました。まぁ、勉強になったからよかったとは思いますが。よく考えたら可変長でメモリを再確保するのならば、参照がずれるのは当然なのかもしれませんね。
vector <CSample*> hoge;
と、vector の要素を自体をポインタにしてあげればよいとのこと。そうするとこうやって配列に入れることができるみたいです。
Hoge *hoge = new Hoge();
hoge ->foo();
vec.push_back(hoge);
0 件のコメント:
コメントを投稿