オブジェクトの作成方法によって異なります。このようにしている場合:
void add() {
Object obj;
vec.push_back(&obj);
}
次に、自動保存期間obj
で作成しています。つまり、関数が終了すると破棄されます。ベクトルにプッシュしたポインターは、有効な を指しなくなるため、絶対にこれを行わないでください。add
Object
ただし、これを行っている可能性があります。
void add() {
Object* obj = new Object();
vec.push_back(obj);
}
その場合、動的ストレージ期間Object
を使用して を作成しており、関数の最後に破棄されません。ベクトルに挿入したポインターは有効なままです。ただし、これを行うと、後でオブジェクトに覚えておく必要があります。そうしないと、漏れが発生します。delete
最善の選択肢は、可能であればポインターをまったく使用しないことです。ベクトルを astd::vector<Object>
にして、そこにオブジェクトをコピーするだけです:
void add() {
vec.push_back(Object());
}
または C++11 の場合:
void add() {
vec.emplace_back();
}
本当にポインタが必要な場合は、スマート ポインタを使用してください。