Не соглашусь с auto_ptr, не все мы живем в идеальном мире, приходится пользоваться и старыми компиляторами.
Переход на новые не всегда возможно, иногда даже вообще невозможно
у вас логическая ошибка в расчете разбиения задачи на подзадачи.
Предположение основанное на том что, кол-во элементов массива всегда кратно кол-ву ядер верно не всегда.
(например кол-во задач 10, кол-во ядер 8)
также уместно будет расчитывать на то, что кол-во задач может быть меньше кол-ва ядер.
(например кол-во задач 7, кол-во ядер 8)
Таже ошибка в цикле поиска максимума (последний элемент не учитывается) :(
Условие item < task.last; не захватывает последний элемент в последнем треде.
Использование не иницилизированной ссылки в структуре не желательно. Хотя компилятор и делает все за нас, но даже банальный resize() не компилируется (и не должен).
Лучше использовать старый добрый указатель.
Если уж взялись писать auto то пишите его везде где возможно и decltype тоже в помощь.
Не соглашусь с auto_ptr, не все мы живем в идеальном мире, приходится пользоваться и старыми компиляторами.
Переход на новые не всегда возможно, иногда даже вообще невозможно
3 Не инициализированную ссылку создать нельзя, но чтобы она ссылалась в никуда можно.
Хотя в таком примере это не столь важно, но я предпочитаю всегда писать с целью повторного использования.
4 Согласованность кода.
Занятно, но следует уточнить несколько деталей.
(например кол-во задач 10, кол-во ядер 8)
(например кол-во задач 7, кол-во ядер 8)
Условие item < task.last; не захватывает последний элемент в последнем треде.
Лучше использовать старый добрый указатель.