uniformly use _free instead of _delete, for consistency