[英]Passing Array of objects Composed of other objects as reference to Functions In C++?
我有一個每秒調用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函數。 這只是一個平面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類使用一個復制構造函數,盡管沒有動態
分配或此類中的指針變量?
--->此內存泄漏的其他根源(如果不是副本構造函數或單例調用的話),會不斷增加內存使用量
的應用程序?
C和C ++中的數組無法按照您描述的方式工作。 我們所謂的“數組”只是一個存儲區域,其中對象彼此相鄰放置,並且指針指向第一個對象。 當您傳遞指向函數的指針時,您只需傳遞一個整數。 它所指向的對象都不會被復制,並且會一直指向相同的連續內存塊。
您遇到的是真正的內存泄漏。 您在某個地方分配了內存,卻在不再需要時忘記將其釋放。 或者,您在不需要的地方輸入遞歸,每個函數都會在堆棧中分配一些內存。
而且您的凝塊顯示得很糟糕-我找不到聲明,您正在代碼窗口后立即談論這些聲明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.