Информация об изменениях

Сообщение забавный баг от 14.09.2014 11:05

Изменено 14.09.2014 11:12 nen777w

Допустил багу по невнимательности, но решил поделиться тут, может кому помоежет избежать такого, или будет что то подобное.
Писал некий редактор у которого есть функция:

void SomeEditor::update()
{
   static Object* ptr[] = { ui->ctrl1, ui->ctrl2, ... };
   
   std::for_each(ptr, ptr+sizeof(ptr)/sizeof(QObject*), [](QObject* p){ p->blockSignals(true); });

   //меняем значение 

   std::for_each(ptr, ptr+sizeof(ptr)/sizeof(QObject*), [](QObject* p){ p->blockSignals(true); });
}


Нашёл багу связанную с тем что при модификации значения сигнал об этом всёравно долетал до его слота.

Как выяснилось банально потому что у меня оказалось два объекта этого редактора один был изначально, а второй добавил по ходу разарботки.
А причина простая: я в попытках сэкономить использовал static масив для указателей.
забавный баг
Допустил багу по невнимательности, но решил поделиться тут, может кому помоежет избежать такого, или будет что то подобное.
Писал некий редактор у которого есть функция:

void SomeEditor::update()
{
   static Object* ptr[] = { ui->ctrl1, ui->ctrl2, ... };
   
   std::for_each(ptr, ptr+sizeof(ptr)/sizeof(QObject*), [](QObject* p){ p->blockSignals(true); });

   //меняем значение 

   std::for_each(ptr, ptr+sizeof(ptr)/sizeof(QObject*), [](QObject* p){ p->blockSignals(false); });
}


Нашёл багу связанную с тем что при модификации значения сигнал об этом всёравно долетал до его слота.

Как выяснилось банально потому что у меня оказалось два объекта этого редактора один был изначально, а второй добавил по ходу разарботки.
А причина простая: я в попытках сэкономить использовал static масив для указателей.