Сабж.
#include <iostream>
#include <vector>
using namespace std;
struct A {
A() { cout << "ctor" << endl; }
A(const A& x) { cout << "copy ctor" << endl; }
A(A&& x) throw() { cout << "move ctor" << endl; }
};
int main()
{
vector<A> v;
for (auto i = 0; i < 4; ++i)
{
cout << "Item: " << endl;
cout << "Capacity: " << v.capacity() << endl;
v.push_back(A());
}
}
Output:
Item:
Capacity: 0
ctor
move ctor
Item:
Capacity: 1
ctor
move ctor
move ctor
Item:
Capacity: 2
ctor
move ctor
move ctor
move ctor
Item:
Capacity: 4
ctor
move ctor
Разве vector не обеспечивает strong exception safe guarantee? Ведь в данном случае move ctor мог сломаться и оставить vector в поломанном состоянии.