почему не работает

работает
не буду спорить на счёт чистоты стиля, конечно, нет никакой
вас интересовал инсёрт, вот, пожалуйста:
BOOL TCollect::Insert(int i, const void *item)
{
if( i == -1 ) i = Count();
if( count == limit )
{
int newLimit = min(limit+delta, MaxCount());
if( newLimit == count ) return error(IDS_SE_MANYITEMS, g_hInstanceNCall), FALSE;
char *ni;
if( ISNULL(ni=new char[newLimit*size_it]) ) return FALSE;
if( count != 0 ) memcpy(ni, items, count*size_it);
delete items; items = ni; limit = newLimit;
}
if( i < count ) memmove(items+(i+1)*size_it, items+i*size_it, (count-i)*size_it);
count++;
if( item ) memcpy(items+i*size_it, item, size_it);
else memset(items+i*size_it, 0, size_it);
return TRUE;
}
его я не стал искажать — можно и ошибиться
и вы правы — вообще не для хранения объектов с деструктором и/или виртуальными функциями, а что делать

идеальные решения не так часто встречаются