помогите с взаимодействием с памятью

Предыдущая тема Следующая тема Перейти вниз

помогите с взаимодействием с памятью

Сообщение  Саня в Чт Авг 19, 2010 10:09 pm

Доброго времени суток.
есть класс - некий список. нужно сделать подпрограмму, которая бы уничтожала этот список полностью, хотяяя...
загвоздка в том, что если элемент списка статический, то его уничтожение delete -ом не получится. в принципе, можно попробовать через deallocate. или есть другие варианты?
avatar
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 23
Откуда : Екатеринбург

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

Re: помогите с взаимодействием с памятью

Сообщение  tux в Пт Авг 20, 2010 2:12 am

если это реализовано в виде класса, то можно использовать destructor, в котором уже все вычищать, вызываться он будет автоматически, как переменная станет ненужной (к примеру при выходе из функции, где она была объявлена)
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 28
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: помогите с взаимодействием с памятью

Сообщение  Саня в Пт Авг 20, 2010 11:22 am

ок, но, допустим, сам список мне нужен, а эта переменная, к примеру, она в функции копия первого элемента списка, и тогда придется в конце функции устанавливать в ноль указатель на следующий элемент. если таких копий много, то это будет неудобно,
другое дело, что перед тем как удалить элемент списка нужно дополнительно вызвать деструкторы полей класса, если они объекты другого класса...а делитом особо не попользуешься..или я чот не понимаю?
avatar
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 23
Откуда : Екатеринбург

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

Re: помогите с взаимодействием с памятью

Сообщение  tux в Сб Авг 21, 2010 8:13 am

приведи лучше пример кода, на словах чета несовсем догоняю, че хочеш сделать
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 28
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: помогите с взаимодействием с памятью

Сообщение  Саня в Пн Авг 23, 2010 9:31 pm

Код:

#Macro SortedList(NameOfType, TypeOfHead )
/'
   класс "реализован" в виде макроса. Это дает некоторое удобство: достаточно указать тип элемента и имя класса.
   Но создает некоторые проблемы, к примеру нежелательно использовать в методах TypeOfHead ptr. Т.к. если
   TypeOfHead - any ptr, то это создаст некоторую путаницу.
'/
   Type NameOfType
Public:
/'
   Конструкторы, деструкторы и т.п. объявлять здесь.
'/
   Declare Constructor ()
   Declare Destructor  ()
Protected:
      Dim next_ As NameOfType Ptr ' Собственно, указатель на следующий элемент списка
      Dim head As TypeOfHead
   End Type
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   Constructor NameOfType ()
    ? "create object"
   End Constructor

   Destructor NameOfType ()
    ? "destroy object"
   End Destructor
#EndMacro

SortedList(z, integer) ' Tерь у нас есть тип z, где head имеет тип integer

Dim foo As z
Dim i  As z Ptr = New z
Delete i  ' нормально удалится

'Delete @foo   ' здесь ошибка: " Invalid data types in 'Delete @foo' " .
/'
   переменная foo статична, значит нельзя её уничтожить "delete"-ом,
   но можно сделать и так:
'/
foo.destructor
DeAllocate @foo

foo = New z ' ошибка, сразу видно, что удалилась и переменная, и объект..,
            ' так шо, если программер попробует ипользовать её дальше, то он фиг скомпилит прогу
Sleep

ну, ка-то так scratch
avatar
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 23
Откуда : Екатеринбург

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

Re: помогите с взаимодействием с памятью

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения