There are three checks for `self.cap != 0`, perhaps this could be baked directly into `deallocate` to return quickly if the `allocation` is null?