Показать сообщение отдельно
Старый 11.08.2011, 09:40   #16
Vadimich
Нуждающийся
 
Аватар для Vadimich
 
Регистрация: 26.08.2010
Сообщений: 54
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: С++ и Блитц Параллели

вроде разобрался со связанным списком и его перебором.. но не могу быть до конца уверен, корректно ли я удаляю объект класса.. не остается ли мусора в памяти после этого. ведь 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;
}
(Offline)
 
Ответить с цитированием