Este programa muito simples pretende demonstrar como é possível fazer uma utilização da memória do computador de forma estática ou dinâmica.
Seguem-se quatro exemplos de versões de um programa que apenas lê dois números inteiros e calcula sua soma.
No primeiro exemplo, as variáveis a e b são criadas de forma estática(stack), e nos três exemplos seguintes a sua gestão é feita de forma dinâmica (heap).
Exemplo 1
#include <iostream>
using namespace std;
int main(){
int a, b;
cout << "a = ";
cin >> a;
cout << "b = ";
cin >> b;
cout << "a + b = " << a + b << endl;
}
Gestão estática da memória.
Exemplo 2
#include <iostream>
using namespace std;
int main(){
int *a, *b;
a = new int;
b = new int;
cout << "a = ";
cin >> *a;
cout << "b = ";
cin >> *b;
cout << "a + b = " << *a + *b << endl;
}
Gestão dinâmica da memória.
Exemplo 3
#include <iostream>
using namespace std;
int main(){
int *a = new int;
int *b = new int;
cout << "a = ";
cin >> *a;
cout << "b = ";
cin >> *b;
cout << "a + b = " << *a + *b << endl;
}
A declaração do apontador e a alocação da memória podem ser feitas na mesma linha.
Exemplo 4
#include <iostream>
using namespace std;
int main(){
int *a = new int;
int *b = new int;
cout << "a = ";
cin >> *a;
cout << "b = ";
cin >> *b;
cout << "a + b = " << *a + *b << endl;
delete a;
delete b;
}
É boa prática libertar a memória que já não é utilizada, embora isto acabe por acontecer quanto o programa termina.
Exemplo 5
#include <iostream>
using namespace std;
int main(){
int *a = new int(2);
int *b = new int(3);
//cout << "a = ";
//cin >> *a;
//cout << "b = ";
//cin >> *b;
cout << "a + b = " << *a + *b << endl;
delete a;
delete b;
}
E já agora, os objectos criados podem receber um valor inicial.