On Thu, Aug 30, 2018 at 7:43 PM, Henri Sivonen <hsivo...@mozilla.com> wrote: >> What is then the point of SetCapacity anymore? > > To avoid multiple allocations during a sequence of Append()s. (This is > documented on the header.)
At this point, it's probably relevant to mention that SetCapacity() in situations other that ahead of a sequence of Append()s is most likely wrong (and has been so since at least 2004; I didn't bother doing code archeology further back than that). SetCapacity() followed immediately by Truncate() is bad. SetCapacity() allocates a buffer. Truncate() releases the buffer. SetCapacity() followed immediately by AssignLiteral() of the compatible character type ("" literal with nsACString and u"" literal with nsAString) is bad. SetCapacity() allocates a buffer. AssignLiteral() releases the buffer and makes the string point to the literal in POD. SetCapacity() followed immediately by Adopt() is bad. SetCapacity() allocates a buffer. Adopt() releases the buffer and makes the string point to the buffer passed to Adopt(). SetCapacity() followed immediately by Assign() is likely bad. If the string that gets assigned points to a shareable buffer and doesn't need to be copied, Assign() releases the buffer allocated by SetCapacity(). Allocating an nsAuto[C]String and immediately calling SetCapacity() with a constant argument is bad. If the requested capacity is smaller than the inline buffer, it's a no-op. If the requested capacity is larger, the inline buffer is wasted stack space. Instead of SetCapacity(N), it makes sense to declare nsAuto[C]StringN<N+1> (with awareness that a very large N may be a problem in terms of overflowing the run-time stack). (I've seen all of the above in our code base and have a patch coming up.) -- Henri Sivonen hsivo...@mozilla.com _______________________________________________ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform