传递由其他对象组成的对象数组作为对C++中函数的引用?
Posted
技术标签:
【中文标题】传递由其他对象组成的对象数组作为对C++中函数的引用?【英文标题】:Passing Array of objects Composed of other objects as reference to Functions In C++? 【发布时间】:2009-08-27 04:57:34 【问题描述】:我有一个每秒调用 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 的调用时,内存保持在 51 MB 左右的恒定水平。 UpdateFromGui 函数没有动态内存分配或 GUI 函数。它只是一个平面简函数,它构造要写入串行端口的数据包,并且每秒调用 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类的复制构造函数,虽然没有动态
这个类中的分配或指针变量?
--->还有什么可能是这种内存泄漏的来源(如果不是关于复制构造函数或单例调用),它会不断增加内存使用量
应用程序?
【问题讨论】:
似乎不太可能将指针数组传递给函数会导致内存泄漏。我认为要么您根本没有发生内存泄漏,但内存使用量无论如何都会上升,或者您正在做其他导致泄漏的事情。无论哪种方式都需要更多代码。 【参考方案1】:C 和 C++ 中的数组不能按照您描述的方式工作。我们所说的“数组”只是一个内存区域,其中对象彼此相邻放置,以及指向第一个对象的指针。当您将指针传递给函数时,您只需传递一个整数。它指向的对象没有被复制,它一直指向同一个连续的内存块。
您遇到的是真正的内存泄漏。当不再需要时,您在某处分配内存并忘记释放它。或者你在不想要的地方进入递归,每个函数在堆栈中分配一些内存。
而且你的 clode 呈现得很糟糕——我找不到声明,你在代码窗口之后就在谈论它。
【讨论】:
@Pavel:我找不到接受函数对象数组的函数声明,这是我问的问题之一? 您不能在 C 和 C++ 中在一个运算符中声明一组函数指针。您可以使用 typedef 定义函数指针类型,然后声明该类型的数组,或者不声明数组,而是声明指向指针的指针。像这样: int (** array_of_function_pointers) (); @pavel:对不起,我的意思是“对象数组”而不是函数对象数组。以上是关于传递由其他对象组成的对象数组作为对C++中函数的引用?的主要内容,如果未能解决你的问题,请参考以下文章
请问,C++中的类的对象组成的动态数组怎么用sort()或qsort()排序?