This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: STL vector::resize


John L. Kulp wrote:
> Shouldn't the last (optional) argument be (1) const and (2) a reference
> (rather than a potentially very expensive copying call-by-value)?  Among
> other things, if you have a type declared with alignment attributes, it
> will fail on this.  I notice the MSVC implementation has (1) but not
> (2).  I can't see any code that would depend on the value being copied.

The standard specifies the signature. Making it const doesn't change
the signature, so that's conforming, but doesn't avoid the copy.
Making it a reference would be non-conforming.

If copy constructions are very expensive then maybe storing the types
in std::vector directly isn't a good idea. You could store them by
(smart) pointer instead, or just use capacity and push_back instead of
resize. Calling resize(n) could result in n copy constructions, so one
more for the parameter isn't going to matter in many cases.

If you remain unconvinced you might want to take the thread to
libstdc++@gcc.gnu.org rather than this list, but I'm certain noone
will change that signature while the standard says it passes by value.

Jon


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]