Допустимо ли применять moveToThread к объекту, созданному на стеке? Например, так:
QThread *thread_ptr = new QThread;
MyClass obj;
obj.moveToThread(thread_ptr);
// (&obj)->moveToThread(thread_ptr);
Не возникнет ли тут проблема, связанная с тем, что локальный объект расположен в памяти, которую в общем-то переместить невозможно, а также она будет очищена при выходе из области видимости? Или же moveToThread произведёт глубокое копирование объекта в память указанного потока?
moveToThread
ничего никуда не перемещает, вопреки своему имени. Он устанавливает ассоциированный с объектом поток. Т.е. устанавливает поток, который будет обрабатывать все слоты, которые должны быть вызваны для этого объекта в случае QueuedConnection
. Совершенно не важно где создан Ваш объект, на стеке или в куче. Перемещение его в другой поток с этим никак не связано.
С большой вероятностью получите проблему. Никто не будет копировать за Вас. Поэтому, обычно в Qt все передают по указателю (или умному, но это реже) и почти всегда создают в динамической памяти.
Почему же "с большой вероятностью"? может так повезти, что объект будет как то жив/доступен, когда к нему обратятся.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Хочу написать параллельный for_each, но внутри мне нужно знать индекс текущего обрабатываемого элементаКак его узнать без data race?
При изменении размеров родительского окна, меняется размер только у одного виджетаНеобходимо, чтобы они изменялись одновременно
Господа! Хочу обратить ваше внимание на следующюю проблемуЕсть небольшой код: