|
Boost : |
From: David Abrahams (david.abrahams_at_[hidden])
Date: 2002-03-08 13:03:40
----- Original Message -----
From: "Howard Hinnant" <hinnant_at_[hidden]>
> On Friday, March 8, 2002, at 12:29 PM, Peter Dimov wrote:
>
> > From: "Howard Hinnant" <hinnant_at_[hidden]>
> >> Meanwhile vector<double> v(10, uninitialized_flag) breaks no vector
> >> invariants. The vector is destructible. The vector elements can
be
> >> assigned into. If your hardware doesn't mind (mine doesn't), you
can
> >> even assign from this uninitialized vector. I can't think of a
reason
> >> why you would want to do that though.
> >
> > You can't v.insert(v.begin(), 5.0) because copying the uninitialized
> > doubles
> > is undefined behavior. The insert() preconditions do not say that
you
> > can't.
> > Something is wrong. :-)
>
> Does passing the vector a chunk of uninitialized memory solve this
> problem?
That wasn't my suggestion:
Suppose we could hand vector<T> a chunk of memory and tell it "this
contains memory for N instances of T, the first M of which have been
constructed", and have it use that memory?
So, in a typical vector
template <class T, class A>
vector<T,A>::adopt(void* elements, size_type length, size_type
initialized = length)
{
if (this->__start != 0) this->clear();
this->__start = static_cast<T*>(elements);
this->__end = this->__start + initialized;
this->__end_of_storage = this->__start + length;
}
Does this clarify?
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk