Given that free is a perfectly good function we can pass in as destroy, why treat NULL as an alias for it ?
Better to have NULL serve to mean "there is no tidy-up to do", so as to save those with no tidy-up the need to write <code>
void vacuous(void*) { return; } </code> in order to pass it in place of NULL as destroy.