No, it doesn't. `FreeEmpty()` isn't really necessary, and just lower memory footprint.

This ring buffers works in following way: there's a looped single-linked list of `Buffer`s with one in pre-allocated/embedded `head_`. Each buffer has `read` and `write` positions, denoting how much data was written to it and how much of it was read (n.b. `read_pos_` <= write_pos_`). Also, there're two interesting `Buffer`s in this linked list loop: `read_head` and `write_head`. All writes are going to current `write_head`, moving it and allocating new buffers when needed. All reads are happening from `read_head`, moving to next buffer when current one is full (`write_pos_ == buffer_size`) and fully-read (`read_pos_ == write_pos_`).

So basically, ring buffer grows when it need store data, and shrinks using `FreeEmpty` when the data is read. `FreeEmpty` deallocates all empty buffers except `head_`, `read_head_`, `write_head_` and `write_head_->next` (to prevent excessive deallocations).