LINUX.ORG.RU

Корректная очистка контейнеров в c++11

 


0

1

Всем привет. Хочу организовать вектор из пар обектов типов A и B и корректно его очищать. Верной ли будет конструкция:

{
...
	list<unique_ptr<pair<unique_ptr<A>, unique_ptr<B>>>> pairsList {
		(new pair(new A(), new B())),
		...
	};
...
}
с учётом, что на выходе из блока всё освободится корректно? Если нет - как сделать элегантно без ручного итерирования?

★★★★★
Ответ на: комментарий от jcd

Сколько пользуюсь

два дня? и где тэг «я познаю мир»?

anonymous
()
Ответ на: комментарий от eao197

потому что бывает только default-list-initialization и copy-list-initialization... а если заглянуть в стандарт и увидеть, что initializer_list<T> передаётся в конструктор по значению...

то можно закрывать этот безумный тред и отправлять тс-а в биореактор :)

anonymous
()

Не усложняй.

using elem = tuple<A, B>;
vector<elem> pairs {elem{A(), B()}, ...};
rupert ★★★★★
()
Ответ на: комментарий от anonymous

а если заглянуть в стандарт и увидеть, что initializer_list<T> передаётся в конструктор по значению...

Полагаю, что проблема не в этом, а в том, что initializer_list имеет методы begin() и end(), которые возвращают const T*. А это означает, что конструктору list-а придется оперировать константными указателями на pair<unique_ptr<A>,unique_ptr<B>>, что не позволит переместить значение из уже имеющихся pair в новые. Можно делать только копирование, но оператор копирования для pair с unique_ptr внутри удален.

eao197 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.