Listing 1: vector erasure
#include <stdio.h>
#include <vector>
using namespace std;
bool tracing = false;
class X
{
public:
X(int value) : value(value)
{
}
X &operator=(X const &that)
{
if (tracing)
printf(assign %d over %d\n, that.value, value);
value = that.value;
return *this;
}
~X()
{
if (tracing)
printf(destruct %d\n, value);
}
private:
int value;
};
int main()
{
vector<X> c;
c.push_back(1);
c.push_back(2);
c.push_back(3);
printf(during erase...\n);
tracing = true;
c.erase(c.begin());
printf(\nduring container destruction...\n);
}
End of Listing