C++ 将由其他对象组成的对象数组作为C+中函数的引用传递+;?

C++ 将由其他对象组成的对象数组作为C+中函数的引用传递+;?,c++,linux,qt,C++,Linux,Qt,我有一个函数,每秒调用自己10次。我正在使用QTimer进行重复呼叫 void DisplayClass::UpdateGuiWithData() { //miscellaneous code which is validated SingletonObjectAsThread::instance()->UpdateFromGuiToExternalHardware(ClassOjbectArray,var1,var2); QTimer::singleShot(100,this,S

我有一个函数,每秒调用自己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&);

};
当我按原样运行代码时,内存大小稳步增加,但当我在UpdateGuiWithData类中注释掉对UpdateFromGui调用的调用时,内存保持在大约51MB的恒定水平。UpdateFromGui函数没有动态内存分配或GUI函数。它只是一个plane 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 );

}
我的问题是

--->我的想法是对的,还是与反复打电话给singleton有关

类对象

--->我还需要类a的复制构造函数,尽管这里没有动态

此类中的分配或指针变量

--->内存泄漏(如果不是关于复制构造函数或单例调用)的原因还可能是什么,它会不断增加内存使用率


应用程序?

< P> C和C++中的数组不按你描述的方式工作。我们称之为“数组”的只是一个内存区域,其中对象彼此相邻,指针指向第一个对象。当您传递指向函数的指针时,只需传递一个整数。没有复制它指向的对象,并且它一直指向相同的连续内存块

您遇到的是真正的内存泄漏。你把内存分配到某个地方,当不再需要的时候忘记释放它。或者在不希望的地方输入递归,每个函数在堆栈中分配一些内存


而且您的clode呈现得很糟糕——我找不到声明,您在代码窗口之后就谈到了这些声明。

向函数传递指针数组似乎不太可能导致内存泄漏。我认为要么你根本没有内存泄漏,但内存使用率还是上升了,要么你正在做其他导致泄漏的事情。帕维尔:我找不到一个函数,它接受一个对象数组来执行函数的声明,这是我问的问题之一。你不能在一个操作符中声明C和C++中的函数指针数组。您可以使用typedef定义一个functionon指针类型,然后声明该类型的数组,或者,不声明数组,只声明指向指针的指针。如下所示:int(**函数指针数组)()@帕维尔:对不起,伙计,我的意思是“对象数组”,而不是函数的对象数组。