Definitely not *static* -- that will make the whole thing not thread-safe.  Maybe you meant into a member variable of the GIFInput, so it's not re-allocated for every scanline?  (Just buffer.resize() as needed.)

vector::clear() does not zero out the members, but it does call the destructor on each one.  But POD types like unsigned char have empty destructors, so this will be an O(1) operation, it merely will change the internal slot that says how many entries in the vector are valid. (It won't even deallocate.)