LINUX.ORG.RU

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

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

Несмотря на то что использовался move ctor который мог сломаться, vector остался бы в нормальном состоянии.

Я посмотрел стандартную библиотеку и там так:

void push_back(const _Ty& _Val)
{
    // insert element at end, provide strong guarantee
    emplace_back(_Val);
}

void push_back(_Ty&& _Val)
{	
    // insert by moving into element at end, provide strong guarantee
    emplace_back(std::move(_Val));
}
сигнатура emplace_back:
	template<class... _Valty>
		decltype(auto) emplace_back(_Valty&&... _Val)
Весь код, который выделяет память и делает работу, он в emplace_back, а если поломаемся в push_back, то на vector мы никак не повлияем...

Исправление fsb4000, :

Несмотря на то что использовался move ctor который мог сломаться, vector остался бы в нормальном состоянии.

Я посмотрел стандартную библиотеку и там так:

void push_back(const _Ty& _Val)
{
    // insert element at end, provide strong guarantee
    emplace_back(_Val);
}

void push_back(_Ty&& _Val)
{	
    // insert by moving into element at end, provide strong guarantee
    emplace_back(std::move(_Val));
}
Весь код, который выделяет память и делает работу, он в emplace_back, а если поломаемся в push_back, то на vector мы никак не повлияем...

Исправление fsb4000, :

Несмотря на то что использовался move ctor который мог сломаться, vector остался бы в нормальном состоянии.

Я посмотрел стандартную библиотеку и там так:

void push_back(_Ty&& _Val)
{	
    // insert by moving into element at end, provide strong guarantee
    emplace_back(std::move(_Val));
}
Весь код, который выделяет память и делает работу, он в emplace_back, а если поломаемся в push_back, то на vector мы никак не повлияем...

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

Несмотря на то что использовался move ctor который мог сломаться, vector остался бы в нормальном состоянии.

Я посмотрел стандратную библиотеку и там так:

void push_back(_Ty&& _Val)
{	
    // insert by moving into element at end, provide strong guarantee
    emplace_back(std::move(_Val));
}
Весь код, который выделяет память и делает работу, он в emplace_back, а если поломаемся в push_back, то на vector мы никак не повлияем...