У меня есть функция, которая называет себя 10 раз в секунду. Я использую QTimer для повторных вызовов.Передача Массив объектов Состоит из других объектов в качестве ссылки на функции в C++?
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&);
};
Вот дело, когда я запускаю код, как есть, есть устойчивый рост объема памяти, но когда я закомментировать вызов к 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);
}
Мой вопрос являются
---> Могу ли я думать на прямой линии или что-то делать с повторным вызовом Синглтон
объект класса?
---> Также мне нужен конструктор копирования здесь для класса А, хотя нет динамических
распределения или указатель переменных в этом классе?
---> Что еще может быть источником этой утечки памяти (если не его не о конструкторе копирования или одноэлементных вызовах), которая постоянно увеличивает использование памяти
приложения?
Кажется маловероятным, что передача массива указателей на функцию вызовет утечку памяти. Я утверждаю, что либо вы не получаете утечки памяти, но все равно использование памяти идет вверх или вы делаете что-то другое, что вызывает утечку. В любом случае требуется больше кода. – Goz