【发布时间】:2017-05-13 21:00:01
【问题描述】:
我正在使用类在 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;
}
}
附:请不要建议使用向量,我正在努力提高我的理解,而不是简单的方法。
【问题讨论】:
-
这不是唯一的错误,您的代码不可编译而且非常混乱。如果您想使用原始数组,则需要更好地理解该主题。
-
缓冲区是
Ennemi **ptr还是Ennemi element[]?从您的代码中不清楚。
标签: c++ arrays object memory memory-management