Cómo eliminar un puntero después de devolver su valor dentro de una función

Tengo esta función:

char* ReadBlock(fstream& stream, int size)
{
    char* memblock;
    memblock = new char[size];
    stream.read(memblock, size);
    return(memblock);
}

La función se llama cada vez que tengo que leer bytes de un archivo. Creo que asigna nueva memoria cada vez que la uso, pero ¿cómo puedo liberar la memoria una vez que he procesado los datos dentro de la matriz? ¿Puedo hacerlo desde fuera de la función? ¿El procesamiento de datos mediante la asignación de grandes bloques ofrece un mejor rendimiento que la asignación y eliminación de pequeños bloques de datos?

¡Muchas gracias por su ayuda!

Respuestas a la pregunta(6)

Su respuesta a la pregunta