Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, gostaria que analizassem essas duas funções e me tirassem duas dúvidas, elas fazem a memsa coisa, mas uma usa memória dinâmica (a primeira):
int CMemoria::addCategoria(unsigned int id, const char nome, const char cor, char nota)
{
Categoria_t *Gravar = new Categoria_t();
Gravar->id = id;
strSet(Gravar->nome, nome);
strSet(Gravar->cor, cor);
Gravar->nota = nota;
delete [] Gravar;e
int CMemoria::addCategoria(unsigned int id, const char nome, const char cor, char nota)
{
Categoria_t Gravar;
Gravar.id = id;
strSet(Gravar.nome, nome);
strSet(Gravar.cor, cor);
Gravar.nota = nota;Minha primeira dúvida:
Gostaria de saber qual são as vantagens de uso de cada uma (qual é mais rápida, qual é mais custosa, ...)
Minha segunda dúvida:
Na primeira função eu uso um "delete []" para liberar a memória utilizada, porem na segunda não sei como o fazer. Gostaria de saber se o espaço de memória utilizado na segunda função ficará indisponível (se ocorre vazamento de memória.)
No primeiro exemplo, ao deletar o ponteiro antes de gravar o que você precisa será inútil a criação do mesmo. O certo seria:
int CMemoria::addCategoria(unsigned int id, const char nome, const char cor, char nota)
{
Categoria_t *Gravar = new Categoria_t();
Gravar->id = id;
strSet(Gravar->nome, nome);
strSet(Gravar->cor, cor);
Gravar->nota = nota;
//demais comandos para gravar arquivo
delete Gravar;
}Hum, sobre a primeira função é verdade que iria me dar problemas, eu coloquei esses comentários enquanto escrevia o tópico e acabei não reparando.
tiagoKv, reparei que você utilizou "delete Gravar" ao invéz de "delete [] gravar", sabe me dizer qual é a diferença das duas?
A diferença é que uma é usada para arrays e outra para um unico objeto.
Hum, então:
delete-> para objetos únicos
delete[] -> para arrays
:D
Moederadores, acho que já podem marcar o tópico como [Resolvido]. Obrigado pela atenção.
no segundo exemplo que você passou não precisa se preocupar em deletar a variável, pois assim que a função em que ela se encontra terminar ela será terminada também. Inclusive se você fizer isso aqui:
int main()
{
{
Vai acusar erro, pois quando acaba o escopo onde variavelAutomatica foi declarada ela é terminada.