У меня есть функция, которая вызывает себя 10 раз в секунду. Я использую QTimer для повторных звонков.
void DisplayClass::UpdateGuiWithData()
{
//miscellaneous code which is validated
SingletonObjectAsThread::instance()->UpdateFromGuiToExternalHardware(ClassOjbectArray,var1,var2);
QTimer::singleShot(100,this,SLOT(UpdateGuiWithData()));
}
Class A_ComposingClass_B_Object
{
//boolean and enum variables
B ArrayOf_B_Objects[16];
}
Class B
{
//boolean and enum vairables
}
class DisplayClass
{
//variables that are not a concern here
UpdateGuiWithData();
A ArrayOfObject_A[4];
};
Class SingletonAsThread
{
//vairables that are not a concern here
UpdateFromGui(A_ComposingClass_B_Object*,const bool&,const bool&);
};
В этом случае, когда я запускаю код как есть, происходит постоянное увеличение объема памяти, но когда я комментирую вызов Call to UpdateFromGui в классе UpdateGuiWithData, память остается на постоянном уровне около 51 МБ. Функция UpdateFromGui не имеет динамического выделения памяти или функций графического интерфейса. Это просто функция плоскости jane, которая создает пакет для записи в последовательный порт и вызывается 10 раз в секунду, поскольку это частота обновления аппаратного обеспечения.
Единственная причина, по которой я могу думать об увеличении памяти, - это передача массива объектов при каждом вызове функции UpdateFromGui. Я думаю, что при каждом вызове мы создаем копию объектов класса и, следовательно, увеличиваем память. Затем я попытался использовать передаваемый массив объектов в качестве ссылки на функцию, но не смог найти подходящее объявление для такой функции, хотя я нашел определение и использование такой функции. Вот что я нашел в сети.
// Получить массив по ссылке.
void GetArray( int (&Array) [10] )
{
}
// Test array by reference.
void CRabbitDlgDlg::TestArray()
{
// Pass array by reference.
int Array[10] = { 0 };
GetArray( Array );
}
У меня вопрос
---> Думал ли я на правильной линии или это как-то связано с повторным вызовом синглтона
объект класса?
---> Также мне нужен здесь конструктор копирования для класса A, хотя динамического
нет
распределение или указатель переменных в этом классе?
---> Что еще может быть источником этой утечки памяти (если не речь идет о конструкторе копирования или одноэлементных вызовах), который постоянно увеличивает использование памяти
заявки?