El Monday 10 November 2014, Bernhard escribió: > So after all I am not supposed to use clear() or operator=() after calling > reserve()? That should be documented. Without that knowledge it obviously > is impossible to use reserve() in a sensible way.
There was a similar question on the development mailing list about clearing QVector while keeping the capacity. The solution seems to use erase(), and that is not available on QByteArray, but see below. http://lists.qt-project.org/pipermail/development/2014-November/019015.html > If you don't have an idea how that could be improved on the code side I > would file a suggestion about extending the documentation a bit. I think that this will work for you (if I understood your use case): QByteArray buffer; buffer.reserve(1000); buffer.append("foo"); qDebug() << "buffer" << buffer.capacity() << buffer; buffer.truncate(0); buffer.append("bar"); qDebug() << "buffer" << buffer.capacity() << buffer; This prints: buffer 1000 "foo" buffer 1000 "bar" As Bo explained, operator= doesn't work because of the implicit sharing. It can be tricky to document which member functions will hold the reserved memory without adding lots of noise to each member description. Maybe the Qt developers don't even want to commit to keeping the same behaviour during all the Qt5 timespan. Sending a patch to improve the documentation is easy once you do the initial procedure: http://qt-project.org/wiki/Qt-Contribution-Guidelines -- Alex (a.k.a. suy) | GPG ID 0x0B8B0BC2 http://barnacity.net/ | http://disperso.net _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest