C++
Home

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