かなり単純な質問があります。オブジェクトへのポインタを含む配列があります。私は時々、それらの配列から変更された配列を作成し、それらをメソッド内でのみ使用します。その後、私はそれらを必要としません。この場合、元の配列を使用し続けるため、ポイントされたデータが破棄されることは望ましくありません。私が完全に理解していないのは、一時的な配列で作成されたポインター (データ自体ではなくポインター) に何が起こるかです。メモリはそれらにどのように対処しますか。私の知る限り、ポインターはアドレスのみを指すことができます。それらを「削除」することはできません。
私にもっと洞察を与えることができる人はいますか?この間ずっと、記憶に何か間違ったことをしているような気がします。
この場合、list は配列実装のオブジェクト ラッパーである「バッグ」です。ただし、インデックス間にギャブが含まれているため、getGapless を使用して、nullptr インデックスが除外されたバッグを取得します。
最後にバッグを削除しますが、実際のコンテンツは削除されません (別の方法で行われます)。
では、「プレーヤー」バッグ内のこれらのポインターはいつ範囲外になるのでしょうか?
virtual void processEntities(artemis::ImmutableBag<artemis::Entity*>& bag)
{
artemis::Bag<artemis::Entity*> * list = (artemis::Bag<artemis::Entity*>*)this->world->getGroupManager()->getEntities("HUMAN");
if(list == nullptr) return;//Kill function
artemis::Bag<artemis::Entity*> * players = list->getGapless();
for(int i=0; i<players->getCount(); i++)
{
for(int j=i+1; j < players->getCount(); j++)
{
if(intersects(*players->get(i),*players->get(j))){
std::cout << "Collide YEAH \n";
}
}
}
delete players;
}