what you had before was definitely optimal (except for the resize). The goal of that rewrite was just to simplify the reading of the buffer part, to help focus on the plugin when reading the code. Whether you use that circular buffer or a list (not sure why a deque), you have to destroy a shared pointer, which is still worse than the re-assignment you had before.
BTW, there is actually a full() member function I had missed in the API. Just pushed.