Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2004-03-08 13:50:07

"Pavel Vozenilek" <pavel_vozenilek_at_[hidden]> writes:

> "David Abrahams" <dave_at_[hidden]> wrote
>> > object pushed out of circular_buffer because container got full must
>> > be destroyed.
>> Why? I mean, the only reason I can see for that requirement is an
>> aesthetic one. I don't see any logical foundation for the assertion.
> I am not getting something. You are saying objects can go away
> without being destructed?

No, I'm saying that their values can go away without destruction: you
could replace their values in the buffer using assignment instead of
destroy + construct. There's no a priori reason they have to be

When I erase objects from a std::vector, the objects being erased
don't neccessarily get destroyed. They may be assigned. For
example, here's STLPort's vector<T>::erase(iterator) implementation:

  iterator erase(iterator __position) {
    if (__position + 1 != end())
      __copy_ptrs(__position + 1, this->_M_finish, __position, _TrivialAss());
    return __position;

Notice that only the last element of the vector is destroyed.

Dave Abrahams
Boost Consulting

Boost list run by bdawes at, gregod at, cpdaniel at, john at