From: Pavel Vozenilek (pavel_vozenilek_at_[hidden])
Date: 2004-03-08 15:16:18
"David Abrahams" <dave_at_[hidden]> wrote
> 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:
> Notice that only the last element of the vector is destroyed.
Quoting from similar discussion on c.l.c++.m: http://tinyurl.com/2c3na
--- quote about vector::erase ---
The standard says this: "The destructor of T is called the number of
times equal to the number of the elements erased, but the assignment
operator of T is called the number of times equal to the number of
elements in the vector after the erased elements."
With circular buffer the destructor wouldn't be called at all,
in similar circumstance.
Circular buffer of size 3.
You create 100 of objects and push them in.
You would get:
- 100 constructors called,
- 97 copy constructors called,
- 3 destructors called.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk