我正在使用类在C++中使用C++空间入侵者游戏的克隆。我希望当激光与外星人(存储在一系列物体中)接触时,包含这个外星人的记忆被释放,并且这个外星人右边的所有记忆被移动1个点,之后我想要创建一个较小的临时数组来存储剩余的对象,以便我可以删除原始内存然后指向临时内存。 (这可能看起来像一个漫长的过程,但它阻止我在整个游戏中检查一个isAlive布尔,并使搜索功能更有效)。如何从对象数组中删除(释放内存)对象(动态内存对象分配)
这是我到目前为止有:
Ennemi::Ennemi() :ExtraTerrestre(0, 0) {
maxElements = 1; // int maxElements
nbElements = 0; // int nbElements
ptr = new Ennemi*[maxElements]; // (Ennemi **ptr)
}
int Ennemi::chercherElement(Ennemi element[]){
int indice = 0;
while (indice < nbElements && ptr[indice] != element)
indice++;
// opérateur ternaire, retourne l'indice si vrai, sinon retourne -1
return indice < nbElements ? indice : -1;
}
void Ennemi::retirerEnnemi(Ennemi element[]) {
int indice = chercherElement(element);
// si un element est trouver active la condition
if (indice != -1) {
// preserver l'ordre du tableau
for (int i = indice; i < (nbElements - 1); i++) {
ptr[i] = ptr[i + 1];
}
nbElements--;
maxElements = nbElements;
// allocation d'une zone memoire
double *ptrTemporaire = new double[maxElements];
// copie des elements dans la nouvelle zone
for (int i = 0; i < nbElements; i++) {
ptrTemporaire[i] = ptr[i];
}
// on libere l'ancienne zone memoire
delete[] ptr;
// fait pointer le pointeur sur la nouvelle zone
ptr = ptrTemporaire;
}
}
附:请不要建议使用矢量,我试图提高我的理解,而不是简单的方法。
我的不好,我的代码有一个错误“double * ptrTemporaire = new double [maxElements];” – Kevin
这不是唯一的错误,你的代码是不可编译的,几乎是一团糟。如果你想使用原始数组,你需要更好地理解该主题。 – Slava
缓冲区是'Ennemi ** ptr'还是'Ennemi元素[]'?你的代码还不清楚。 –