#c
#c
Вопрос:
Например, если я могу вызвать асинхронную функцию следующим образом:
{
Example example;
example.asyncFuncInside();
}
Поскольку объект освобождается после области видимости, будут ли у него какие-либо риски для текущей задачи, выполняемой внутри асинхронной функции?
Комментарии:
1. зависит от того, что
asyncFuncInside();
есть и должна ли быть активна его асинхронная частьexample
2. Да. Определенно плохо. Он все еще вызывает его. Неопределенное поведение, потому что вы больше не знаете, что будет в этом месте.
Ответ №1:
На это нельзя ответить в текущей форме. Если «асинхронный» является отключенным std::thread
, ничего плохого не происходит. С другой стороны, если асинхронная функция была реализована с использованием std::async
, то asyncFuncInside
она вернет ее std::future
, и, поскольку это игнорируется, dtor std::future
будет блокировать.
Комментарии:
1. Извините, но почему для отдельного std::thread ничего плохого не происходит? Я полагаю, что доступ ко всем переменным-членам будет рискованным после уничтожения локального объекта?
2. @Michael: Доступ к элементам уничтоженного объекта действительно плох, но это плохая идея, независимо от того, как это происходит. Итак, сначала мы предполагаем, что код, не связанный с потоком, правильный, а затем мы рассматриваем,
std::thread::detach
нарушает ли что-нибудь.