
paulo1205
(usa Ubuntu)
Enviado em 25/06/2013 - 14:21h
Note uma coisa: em C não é necessário fazer conversão de tipo de
void* para nenhum outro tipo de ponteiro. Veja o código abaixo, que é perfeitamente válido em C, mas inválido em C++.
/* Este programa é um programa em C que NÃO É VÁLIDO EM C++! */
char *pc=malloc(100*sizeof *pc);
int *pi=malloc(100*sizeof *pi);
double *pd=malloc(100*sizeof *pd);
/* ... algum código que usa os ponteiros acima ... */
free(pd);
free(pi);
free(pc);
Como você está usando C++, o código acima não vale. Contudo, a melhor forma de corrigi-lo não é sair colocando conversões de tipo para todo lado, mas sim usar a forma C++ de fazer alocação dinâmica, como os operadores
new e
new[] para alocar, e
delete ou
delete[] para desalocar. Isso elimina completamente a necessidade das conversões de tipo.
// Este é um programa em C++ que não usa o estilo de alocação do C.
char *pc=new char[100];
int *pi=new int[100];
double *pd=new double[100]https://maps.google.com/;
/* ... algum código que usa os ponteiros acima ... */
delete[] pd;
delete[] pi;
delete[] pc;
Se for para usar arrays dinâmicos, eventualmente você pode até preferir a biblioteca padrão de modelos do C++ (STL), valendo-se da conveniência de
std::vector em lugar de ter de alocar e desalocar ponteiros explicitamente.
Quanto a conversões de tipo, a boa prática em C++ recomenda não usar o estilo do C, mas operadores que deixam essas conversões mais visíveis, determinam sua natureza (estática, dinâmica, constante ou completamente arbitrária) e dão algum nível de garantia de que a conversão de tipos é segura. No caso do seu código, se você de modo nenhum quiser usar
new[]/
delete[], considere pelo menos usar a conversão de tipos no estilo do C++.
// A conversão com static_cast<> é segura de funcionar em qualquer máquina.
int *pi=static_cast<int *>(malloc(100*sizeof *pi));
/* ... bla, bla, bla ... */
free(pi);
Ainda com relação a estilo, programas em C++ que usam a biblioteca padrão do C devem preferir incluir cabeçalhos para ela que incluem as transformações necessárias para o C++. Assim, em lugar de
#include <stdlib.h>, é preferível usar
#include <cstdlib>.