Passando Array de objetos composta de outros objetos como referência a funções em C ++?

votos
0

Eu tenho uma função que se chama 10 vezes por segundo. Eu estou usando QTimer para chamadas repetidas.

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&);

};

Aqui é o negócio quando eu executar o código como está, há um aumento constante no tamanho da memória, mas quando eu comentar a chamada para UpdateFromGui chamada na classe UpdateGuiWithData, a memória permanece a um nível constante de cerca de 51 MB. A função UpdateFromGui não tem funções de alocação de memória ou GUI dinâmicas. É apenas uma função jane avião que constrói o pacote para escrever a porta serial e é chamado de 10 vezes por segundo desde esta é a taxa de atualização do hardware.

A única razão que eu poderia pensar o aumento na memória está passando a matriz de objetos com cada chamada para a função UpdateFromGui. Eu acho que com cada chamada que estamos a criar uma cópia de objetos de classe e, portanto, o aumento na memória. Então eu tentei usar passando matriz de objetos como referência para a função mas não conseguiu encontrar uma declaração adequada para tal função, embora eu achei a definição e uso de tal função. Aqui está o que eu encontrei na net.

// Receber matriz por referência.

void GetArray( int (&Array) [10] )

{

}

// Test array by reference.

void CRabbitDlgDlg::TestArray()

{

    // Pass array by reference.

    int Array[10] = { 0 };

    GetArray( Array );

}

A minha pergunta é

---> Estou pensando na linha direita ou é algo a ver com a chamada repetida a Singleton

objeto de classe?

---> fazer também eu preciso de um construtor de cópia aqui para Classe A, embora não haja dinâmica

variáveis ​​de alocação ou de ponteiro nesta classe?

---> O que mais pode ser a fonte deste vazamento de memória (se não a sua não sobre construtor de cópia ou chamadas únicas) que constantemente aumenta o uso de memória

da aplicação?

Publicado 27/08/2009 em 05:57
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

Arrays em C e C ++ não funcionam da maneira que você descreveu. O que chamamos de um "array" é apenas uma região de memória, onde os objetos são colocados ao lado do outro, e o ponteiro que aponta para primeiro objeto. Quando você passar um ponteiro para uma função, basta passar um único número inteiro. Nenhum objeto que aponta para é copiado e mantém apontando para o mesmo pedaço contíguo de memória.

O que você encontrou um vazamento de memória verdadeira. Você alocar memória em algum lugar e se esqueça de libertá-lo, quando ele não é mais necessário. Ou você entra recursão onde você não queria, e cada função aloca alguma memória na pilha.

E sua clode é mal apresentado - não consigo encontrar declarações, sobre o qual você está falando logo após a janela de código.

Respondeu 27/08/2009 em 07:11
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more