•
Alocação
Dinâmica de Memória
Os operadores New
e Delete fornecem um meio mais agradavel para executar a alocação
Dinâmica de Memória.
Para isso em C++ você deve escrever:
tipo_nome_ponteiro
= new tipo_nome;
O operado new cria
altomaticamente um objeto to tamanho apropriado, chama o construtor do objeto
e retorna um ponteiro do tipo correto.
Se new não conseguir encontrar espaço, ele retorna um ponteiro
0. Mais a frente iremos ver como lidar com más criações
com new.
Para destruir o
objeto e liberar espaço, usamos o operador delete.
C++ permite que
fornecemos um inicializador para um objeto criado com new.
int *numero = new n ( 10 ); // inicia um objeto n com
10.
Um
array de 10 elementos pode ser criado e atribuído a nosso_array assim:
int
*nosso_array = new int[10];
E
ele pode ser deletado com o comando:
delete
[] nosso_array;
Em
particular, new invoca o construtor e delete o destrutor.
//
exemplo simples
#include <iostream>
int main()
{
int *n = new int[10];
n[1]
= 10;
std::cout << n[1] << std::endl;
delete []
n;
std::cin;
return 0;
}
// exemplo com
classe
#include <iostream>
#include <cassert>
class numeros{
public:
numeros( int );
~numeros();
private:
int *n;
};
numeros::numeros(
int quantidade )
{
n = new int[ quantidade ];
assert( n != 0 );
n[1] = 10;
std::cout << n[1] << std::endl;
}
numeros::~numeros()
{
delete [] n;
}
int main()
{
numeros *ponteiro = new numeros( 3 );
delete ponteiro;
ponteiro = 0;
std::cin;
return 0;
}
Observe que no
exemplo com objetos, usamos o assert que está definida na biblioteca
cassert. Ele testa um valor de uma condição, se for false, é
impressa uma mensagem de erro. Mostrando a linha e a condição,
fazendo com que o programador possa consertar o erro mais rapidamente.
As asserções
não precisam ser removidas do programa, basta inserir no codigo um #define
NDEBUG, que faz com que o compilador ignore todas as asserções.
Perguntas??? Email
|