クラスのインスタンスのポインタを作成する必要があり、プログラムはコンパイル時に作成するポインタの数を知らない。 削除のために、私はベクトルにポインタを格納し、それを一つずつ削除することを検討していました。 スマートポインタの使用はよりクリーンな方法でしょうか? スマートポインタを使用したくない場合、このベクトルの使用はきれいだと考えられますか?ポインタのベクトルを削除する
最小コード:
#include <vector>
using namespace std;
class Foo {
public:
Foo();
};
Foo::Foo(){}
void createFooVector(int nb, std::vector<Foo*> &v){
for(int i=0;i<nb;i++){
Foo* f = new Foo();
v.push_back(f);
}
}
int main(int argc, char *argv[]){
std::vector<Foo*> v;
createFooVector(5,v);
while (!v.empty()){
Foo* f = v.back();
v.pop_back();
delete f;
}
}
本当にポインタのコンテナが必要ですか? 'Foo'オブジェクトを値として保存できません(' std :: vector ')?また、 'createFooVector'が引数として与えられたものを変更するのではなく、新しいベクトルを返した場合、それはもっと明確になりませんか? –
@LucTouraille私はこの理由のためにポインタを使用します:http://stackoverflow.com/questions/15471193/vector-of-virtual-class-are-pointers-the-cleanway-to-go ...これはできませんでした私がここに示したコードでは、最小限に抑えようとしました。 – Vince