Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Как правильно сделать и delete в стеке


Автор: Klio 18.11.2010, 19:01
Приветствую господа программисты, помогите решить вопрос...
Структура, по своему подобию напоминает динамичесский стек, он находится внутри класса.
Стек увеличивается посредством добавления структур через new и привязке по next... Если есть выделение памяти под каждый стек то необходима и очистка... вопрос только как правильно это сделать...
Код
class ment{
  int number;       // длинна стека
  struct intern{    // много записей
      intern* next; // ссылка связующая со следующим элементом стека
  }
  intern* head; // голова стека
  public:
    ~ment();
}
void del_intern(intern i) {                     // как правильно записать передачу элемента?
  if (i.next!=null) del_intern(i.next);      // переход к следующему элементу всписке, если он есть (рекурсия)
  i.next=null;
  delete i;                       // удаляем элемент стека
}
ment::~ment(){
  if (number!=0) del_intern (this.head)  //  если есть элементы то удаляем их
  number=0;
  this.head=null; 
}


Автор: azesmcar 18.11.2010, 19:06
Цитата(Klio @  18.11.2010,  19:01 Найти цитируемый пост)
Структура, по своему подобию напоминает динамичесский стек, он находится внутри класса.

по своему образу и подобию она напоминает односвязный список.

Цитата(Klio @  18.11.2010,  19:01 Найти цитируемый пост)
Если есть выделение памяти под каждый стек то необходима и очистка... вопрос только как правильно это сделать...

в чем собственно проблема? начать с head-а и удалять пока не дойдешь до конца.

Автор: ИванМ 18.11.2010, 19:08
Типа такого:
Код

ment::~ment(){
  intern* cur=head;
  while(cur)
  {
    intern* next=cur.next;
    delete cur;
    cur=NULL;
    cur=next;
  } 
}

Автор: baldina 18.11.2010, 19:33
Код

class ment{
  int number;       // длинна стека
  struct intern{    // много записей
      intern* next; // ссылка связующая со следующим элементом стека
  }
  intern* head; // голова стека
  public:
    ~ment();
}

// это удаление от i до конца
/* так:
void del_intern(ment::intern* i) {                     // как правильно записать передачу элемента?
  if (i.next) 
     del_intern(i->next);      // переход к следующему элементу всписке, если он есть (рекурсия)
  delete i;                       // удаляем элемент стека
}

хотя лучше без рекурсии:
*/
void del_intern(ment::intern* i) {                     
  while (i)
  {
     ment::intern* next = i->next;
     delete i;
     i = next;
  }
}

ment::~ment(){
  del_intern (head);  //  если есть элементы то удаляем их
}


ment... интересное имя для класса...

Автор: Klio 18.11.2010, 20:00
всем большое спасибо за помощь!!!

ment  -> middle enter () - в названиях не люблю ставить "_", только в функциях 

Автор: boostcoder 18.11.2010, 20:12
про shared_ptr<> никто не вспомнил smile 

Автор: Леопольд 18.11.2010, 23:21
boostcoder, ему не надо... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)