> Нашёл совет - делать free()
>
> free(item);
> delete At(i);
> Код не мой, и этот факинг C++, хрен поймешь () - это
> присваивание или аргумент функции.Совет не правильный, free чисто помечает выделенный участок памяти как свободный, в то время как delete вызывает деструктор(и если это правильный деструктор то он будет виртуальным), который помимо вызова фри выполняет особождение еще сопутствующих ресурсов данного обьекта, как например связанные области памяти, установленные семафоры и тп ресурсы. если вызывать фрии то у вас как минимум при использованнии данного класса начнуться утечки памяти.
В простейшем случае когда обьект занимает только ресурс данный ресурс памяти и не имеет ранее выделеных связанных областей, конечно этого не произойдет. но кто знает как затем будет использваться ваш класс? вполне вероятно что вы решите там хранить очень сложные обьекты.
поэтому настоятельно рекомендуется вызывать делете.
так вот, вызывая void *item = At(i); и затем делете, вы пытаетесь вызвать виртуальный или а скорее статический деструктор для типа void *, что является неправильным с точки зрения компилятора, скорее всего делит не может определить что вызвать.
а поскольку вы не знаете что за типы будут храниться в вашем списке единственным вариантом будет delete At(i) (хотя можно поставить присваивание некому базовому классу и уничтожать его элемент) тогда компилятор оставит выбор вызова деструктора до этапа выполнения.
Кстати, надеюсь что вы деструктор своего класса сделали виртуальным? ))))
почитайте Ален Голуб с энд С++ правила программирования, с++ это далеко не си