LINUX.ORG.RU

История изменений

Исправление fsb4000, (текущая версия) :

А вообще может я не совсем понял. Добавил copy конструктор с noexcept и стало так:

#include <iostream>
#include <vector>
using namespace std;

struct A {
	A() { cout << "ctor" << endl; }
	A(const A& x) noexcept(true) { cout << "copy ctor" << endl; }
	A(A&& x) noexcept(false) { 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());
	}
}
Item:
Capacity: 0
ctor
move ctor
Item:
Capacity: 1
ctor
move ctor
copy ctor
Item:
Capacity: 2
ctor
move ctor
copy ctor
copy ctor
Item:
Capacity: 3
ctor
move ctor
copy ctor
copy ctor
copy ctor

Добавлено: noexcept не влияет, c noexcept(false) у copy ctor, тоже самое...

Исходная версия fsb4000, :

А вообще может я не совсем понял. Добавил copy конструктор с noexcept и стало так:

#include <iostream>
#include <vector>
using namespace std;

struct A {
	A() { cout << "ctor" << endl; }
	A(const A& x) noexcept(true) { cout << "copy ctor" << endl; }
	A(A&& x) noexcept(false) { 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());
	}
}
Item:
Capacity: 0
ctor
move ctor
Item:
Capacity: 1
ctor
move ctor
copy ctor
Item:
Capacity: 2
ctor
move ctor
copy ctor
copy ctor
Item:
Capacity: 3
ctor
move ctor
copy ctor
copy ctor
copy ctor