Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Kurles от Декабрь 24, 2012, 14:32



Название: разница в передаче данных по ссылке и по значению посредством сигналов[РЕШЕНО]
Отправлено: 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, иначе нет выхода на сериализацию. Или как-то иначе?

Естественно, при коннекте об этом и напишут.