free libera la memoria, delete es mas poderoso, pues si se trata de un puntero a un objeto, invoca al destructor del mismo (y libera la memoria despues).
La combinacion alloc (o malloc) y free, no se intercambia con new y delete, si solicitaste memoria con new, libera con delete, si pediste con alloc (o alguno de sus parientes), liberas con free.