|
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
destroyed.
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());
--this->_M_finish;
_Destroy(this->_M_finish);
return __position;
}
Notice that only the last element of the vector is destroyed.
-- Dave Abrahams Boost Consulting www.boost-consulting.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk