Ответ: С++ и Блитц Параллели
вроде разобрался со связанным списком и его перебором.. но не могу быть до конца уверен, корректно ли я удаляю объект класса.. не остается ли мусора в памяти после этого. ведь object, являющийся указателем, сначала обнуляется.. но по другому delete применить не получилось
посмотрите, пожалуйста:
//--------------------------------
#include "stdafx.h"
#include <iostream>
using namespace std;
// Создаем новый класс
class Person
{
public:
int age,id,health;
Person* pNext;// указатель на следующий объект списка
};
Person* pRoot = 0; // указатель на основание списка
// создание основания класса
void PersonAddRoot()
{
Person* object = new Person;
object->pNext = pRoot;
pRoot = object;
return;
}
// создание нового объекта с добавлением в список
void PersonAddObject()
{
if (pRoot == 0) // если основание списка не было создано...
{
PersonAddRoot();// ... создаем основание
}
Person* object = new Person; // создаем новый объект
Person* pCurrent = pRoot; // создаем указатель на основание списка
int index=0; // инициализируем счетчик ID
while(pCurrent->pNext != 0)// ищем конец списка
{
index++;
pCurrent = pCurrent->pNext;
}
pCurrent->pNext = object; //устанавливаем указатель предыдущего объекта на новый объект
object->pNext = 0;
object->id = index;
object->health = 10;
object->age = index*3;
return;
}
void PersonShowList()
{
Person* pCurrent = pRoot; // создаем указатель на основание списка
while(pCurrent->pNext != 0)
{
pCurrent = pCurrent->pNext;
cout << "id: " <<pCurrent->id << " age: " << pCurrent->age << " health: " << pCurrent->health << endl;
}
return;
}
void PersonDeleteObject(Person* object)
{
Person* pCurrent = pRoot;
while(pCurrent->pNext != object)
{
pCurrent = pCurrent->pNext;
}
pCurrent->pNext = object->pNext;
object->pNext = 0;
object = 0;
delete(object);
return;
}
void PersonUpdate() // обновляем объекты типа и проверяем, какой удалить
{
Person* pCurrent = pRoot;
while(pCurrent->pNext !=0)
{
pCurrent = pCurrent->pNext;
if (pCurrent->id ==2)
{
pCurrent->age = 666;
PersonDeleteObject(pCurrent);
}
}
return;
}
int main()
{
for(int i=0;i<6;i++)
{
PersonAddObject(); // создаем объекты
}
PersonUpdate(); перебираем и удаляем через условие
PersonShowList(); отображение
return 0;
}
|