Russian Qt Forum
Сентябрь 23, 2024, 06:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: разница в передаче данных по ссылке и по значению посредством сигналов[РЕШЕНО]  (Прочитано 4760 раз)
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« : Декабрь 24, 2012, 14:32 »

Здравствуйте!

Задался таким вопросом: безопасно ли использование константных ссылок при "испускании" сигналов, ведь слот, к которому присоединен сигнал может вызваться уже после того, как переменная, которую передали по константной ссылке, уже вышла за пределы видимости и ее значение уже не определено? Надеюсь понятно вопрос изложил )

« Последнее редактирование: Декабрь 24, 2012, 16:56 от Kurles » Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Декабрь 24, 2012, 16:21 »

Да, внутри сигнала снимается копия переданного значения (причем в куче).
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #2 : Декабрь 24, 2012, 16:57 »

Да, внутри сигнала снимается копия переданного значения (причем в куче).
Спасибо.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Декабрь 24, 2012, 17:27 »

Да, внутри сигнала снимается копия переданного значения (причем в куче).
Не изучал это место, но полагаю что через сериализацию/де-сериализацию?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Декабрь 24, 2012, 17:46 »

Да, внутри сигнала снимается копия переданного значения (причем в куче).
Не изучал это место, но полагаю что через сериализацию/де-сериализацию?

Посмотрел, оказывается, я наврал. При прямом коннекте ничего не копируется, а вот при Queued снимается копия посредством QMetaType::create
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Декабрь 24, 2012, 17:53 »

При прямом коннекте ничего не копируется...
При прямом коннекте вызов слота реализуется как вызов метода. Копировать ничего не нужно, все локальные переменные будут живы.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Декабрь 24, 2012, 17:58 »

При прямом коннекте ничего не копируется,
Ну это и так всем понятно что речь только о Queued
а вот при Queued снимается копия посредством QMetaType::create
и обязательно registerMetaType, иначе нет выхода на сериализацию. Или как-то иначе?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #7 : Декабрь 24, 2012, 18:10 »

а вот при Queued снимается копия посредством QMetaType::create
и обязательно registerMetaType, иначе нет выхода на сериализацию. Или как-то иначе?

Естественно, при коннекте об этом и напишут.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 22.