簡體   English   中英

傳遞對象數組由其他對象組成,以引用C ++中的函數嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM