class Vec
{
public:
Vec(float x, float y, float z) : x(x), y(y), z(z) {};
float x, y, z;
};
int main()
{
vector<Vec*> vec; vec.push_back(new Vec(11, 0, 0)); printf("%d\n", vec[0]->x);
}
printfで11を表示させたいのですが
このprintfの結果がなぜか0になります
ブレポを確認しましたがしっかり vec(11,0,0,)がはいっておりました
余計なお世話とは思いますが、vector に生のポインタを格納するのはお勧めできません。
Vec そのものを格納するか、スマートポインタのご利用をお勧めします。
(プログラムの種類によっては、メモリーリークを気にしないという考え方もありますが。)
vecそのものというのは
Vec *a = new Vec(0, 0, 0);
vector<Vec> v
v.push_back(a)
こんな感じでしょうか?
そもそも new しないという話です。
返信ありがとうございます
なるほど
つまり↓のほうがいいということですね
気を付けて組んでみます!
vector<Vec*> v;
Vec vd(0, 0, 0);
v.push_back(&vd);
ごめんなさい、↑は良くないやつです。↓こんな感じで。
vector<Vec> vec;
vec.push_back(Vec(11, 0, 0));
// または、vec.emplace_back(11, 0, 0);
printf("%f\n", vec[0].x);
昔の記事ですが、ご参考まで。
https://qiita.com/hoshi-takanori/items/97ca92a40f6558fd319c
回答2件
あなたの回答
tips
プレビュー