Search
Write a publication
Pull to refresh

Comments 6

У читателя также может возникнуть вопрос: "Зачем было заменять emplace_back на push_back"?

У читателя совсем другой вопрос: зачем было добавлять std::make_unique? Ведь вы говорите

Контейнер modificators – это двусвязный список "умных" указателей std::unique_ptr

Значит, метод push_back уже принимает std::unique_ptr.

Хотя, в ответ наверняка будет что-то, сводящееся к "явное лучше неявного"...

Читатель, очевидно, не знает, что у std::unique_ptr нет конвертирующего конструктора из raw pointer:

std::vector<std::unique_ptr<int>> v;

v.emplace_back(new int{1}); // OK
v.push_back(new int{1}); // Ашипка: no matching function for call to 'push_back' ... no known conversion from 'int *' to 'value_type' (aka 'std::unique_ptr<int>')
v.push_back(std::make_unique<int>(1)); // OK

поэтому тупо заменить вызовemplace_back() на push_back() с тем же самым аргументом в данном случае не выйдет.

Читатель, очевидно, не знает, что у std::unique_ptr нет конвертирующего конструктора из raw pointer

Совсем забыл, что нужный конструктор explicit.

Промазал, это ответ @KanuTaH

Большое спасибо за проведённый анализ! У нас даже есть таск для прогонки PVS-Studio, но пока всё руки не доходили)

Над проектом трудится большая команда разработчиков

Ах, если б это было так... На самом деле на текущий момент команда очень маленькая, за последние полгода подавляющее большинство кода написано всего одним человеком. Всех желающих ждём "к столу"!

Всегда пожалуйста! Это Вам спасибо за Ваши труды.
Я всё же рекомендую, если дойдут руки, самим провести анализ и разобрать срабатывания, т.к. в статье описаны далеко не все случаи. Также, если времени разбираться со всеми срабатываниями пока нет, можно подавить существующие и разбирать только относящиеся к новому коду, а к старым возвращаться по возможности.

Sign up to leave a comment.