0

私は C++ の割り当てに取り組んでおり、プログラムでポリモーフィズムを使用しようとしています。私のプログラムでは、いくつかのオブジェクトのポインターを、それらが構築された直後にポインターベクターに格納したいと考えています:

entities.push_back(&Invader4());
entities.push_back(&Invader3());
entities.push_back(&Invader2());
entities.push_back(&Invader1());
entities.push_back(&Invader0());

class Invader は class Entity を継承していますが、entities 内の要素にアクセスしようとすると、アクセス違反が発生します。これらのオブジェクトを最初に格納するには、別の Invader 型ベクトルを宣言する必要がありますか?

4

1 に答える 1

5

一時的なアドレスを取得していますが、これは違法です(正確には未定義の動作)。メモリを動的に割り当てるだけです。

entities.push_back(new Invader4());
entities.push_back(new Invader3());
entities.push_back(new Invader2());
entities.push_back(new Invader1());
entities.push_back(new Invader0());

完了したら、ベクター内のメモリを削除することを忘れないでください。

また、ここではより適切なスマートポインタを調べてください。

編集:削除することで、つまり

for (int i = 0 ; i < entities.size() ; i++ )
    delete entities[i];

ベクトルが終わったら。

于 2012-05-07T12:15:05.613 に答える