Название: разница в передаче данных по ссылке и по значению посредством сигналов[РЕШЕНО] Отправлено: Kurles от Декабрь 24, 2012, 14:32 Здравствуйте!
Задался таким вопросом: безопасно ли использование константных ссылок при "испускании" сигналов, ведь слот, к которому присоединен сигнал может вызваться уже после того, как переменная, которую передали по константной ссылке, уже вышла за пределы видимости и ее значение уже не определено? Надеюсь понятно вопрос изложил ) Название: Re: разница в передаче данных по ссылке и по значению посредством сигналов Отправлено: Авварон от Декабрь 24, 2012, 16:21 Да, внутри сигнала снимается копия переданного значения (причем в куче).
Название: Re: разница в передаче данных по ссылке и по значению посредством сигналов Отправлено: Kurles от Декабрь 24, 2012, 16:57 Да, внутри сигнала снимается копия переданного значения (причем в куче). Спасибо.Название: Re: разница в передаче данных по ссылке и по значению посредством сигналов Отправлено: Igors от Декабрь 24, 2012, 17:27 Да, внутри сигнала снимается копия переданного значения (причем в куче). Не изучал это место, но полагаю что через сериализацию/де-сериализацию?Название: Re: разница в передаче данных по ссылке и по значению посредством сигналов Отправлено: Авварон от Декабрь 24, 2012, 17:46 Да, внутри сигнала снимается копия переданного значения (причем в куче). Не изучал это место, но полагаю что через сериализацию/де-сериализацию?Посмотрел, оказывается, я наврал. При прямом коннекте ничего не копируется, а вот при Queued снимается копия посредством QMetaType::create Название: Re: разница в передаче данных по ссылке и по значению посредством сигналов Отправлено: Old от Декабрь 24, 2012, 17:53 При прямом коннекте ничего не копируется... При прямом коннекте вызов слота реализуется как вызов метода. Копировать ничего не нужно, все локальные переменные будут живы.Название: Re: разница в передаче данных по ссылке и по значению посредством сигналов Отправлено: Igors от Декабрь 24, 2012, 17:58 При прямом коннекте ничего не копируется, Ну это и так всем понятно что речь только о Queuedа вот при Queued снимается копия посредством QMetaType::create и обязательно registerMetaType, иначе нет выхода на сериализацию. Или как-то иначе?Название: Re: разница в передаче данных по ссылке и по значению посредством сигналов Отправлено: Авварон от Декабрь 24, 2012, 18:10 а вот при Queued снимается копия посредством QMetaType::create и обязательно registerMetaType, иначе нет выхода на сериализацию. Или как-то иначе?Естественно, при коннекте об этом и напишут. |