Re: using vector to encapulate a tree - non const copy constructors
Francis Glassborow wrote:
In article <1163778871.426938.244870@f16g2000cwb.googlegroups.com>, Le
Chaud Lapin <jaibuduvin@gmail.com> writes
That's just it. Technically, you do not know how vector<> is
implemented. You certainly cannot infer that it has a collection of
A*, or even pointer to a not-yet-allocated array of A. Suppose I
replace std::vector with
template <typename X> struct Vector
{
X buffer[16];
} ;
While not disagreeing with the rest of your post, this part is
wrong. The implementation is not allowed to implement
vector<> like that, well not just like that.
Of course not, since this would require a default constructor.
It would be allowed to define a buffer of unsigned char of the
correct size, and use it as its raw memory as long as the array
was small enough.
Without looking at the requirements in detail I cannot comment
as to whether some variant of the small string optimisation
might be allowable.
I'm pretty sure it would be. Unlike basic_string, however,
vector is allowed to contain objects with non-trivial
destructors, a default constructor is not required, and there
are very definite requirements concerning when constructors are
called. So the "small string optimization" would have to use a
buffer of raw memory (probably with some implementation
dependant trick to ensure proper alignment).
However the standard does require that given:
std::vector<T> vectorof T;
code making vectorofT non-empty
&vectorofT[0] produces a pointer to the first element of a contiguous
array of T
I don't see how that affects the small string optimization.
Current implementations using that optimization in strings also
present the string as contiguous memory.
--
James Kanze (Gabi Software) email: james.kanze@gmail.com
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France, +33 (0)1 30 23 00 34
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]