При использовании std::packaged_task деструктор статичного объекта вызывается после завершения работы потока, т. е. по запросу готовности соответствующего fututre.
В случае с std::async деструктор не вызывается. По-видимому, поток в таком случае системой освобождается после вызова деструкторов всех глобальных объектов. Прав ли я и как с этим бороться?
Алмаз
> деструктор статичного объекта вызывается после завершения работы потока
Деструктор статичного объекта вызывается, когда взбредёт в голову рантайму. Тут лучше ни на что не рассчитывать и использовать какой-нибудь синглтон с контролируемым временем жизни.
Деструкторы статических объектов вызываются строго в порядке обратном вызову их конструкторов.
Конструкторы вызываются сверху вниз, как описаны в компилируемом файле. Порядок вызова конструкторов из разных единиц компиляции не определен, может быть любым.
Тема в архиве.