Olá, estudante.
Tudo bem?
Verdade, tem hora que é muita informação, a gente acaba se confundindo e tem coisas que demoram mais para entrar na cabeça. Mas é normal. Todo mundo passa por isso em programação.
Vou tentar ajudar a entender a diferença entre as formas de instanciar objetos em C++ que você mencionou.
1. Usuario usuario = new Usuario;
Essa linha de código está incorreta em. O correto seria com U maiúsculo após o new:
Usuario* usuario = new Usuario;
Aqui, você está alocando um objeto Usuario
na memória heap e armazenando o endereço desse objeto em um ponteiro usuario
. Isso significa que você terá que gerenciar manualmente a memória, ou seja, lembrar de liberar essa memória com delete
quando não precisar mais do objeto para evitar vazamento de memória.
2. Usuario* usuario = new Usuario;
Essa é a forma correta de alocar um objeto Usuario
na heap. O ponteiro usuario
armazena o endereço do objeto criado. Como mencionado anteriormente, é crucial liberar a memória alocada com delete
para evitar vazamentos de memória:
delete usuario;
Diferença na posição do *
Não há diferença funcional entre Usuario* usuario
e Usuario *usuario
. Ambas as formas são equivalentes e funcionam da mesma maneira. A escolha entre uma e outra é puramente uma questão de estilo de código. Alguns preferem colocar o *
próximo ao tipo (Usuario* usuario
), enquanto outros preferem colocá-lo próximo ao nome da variável (Usuario *usuario
).
Exemplo Prático
Aqui está um exemplo prático para ilustrar as diferenças:
#include <iostream>
class Usuario {
public:
void dizOla() {
std::cout << "Olá, eu sou um usuário!" << std::endl;
}
};
int main() {
// Alocação na heap
Usuario* usuarioHeap = new Usuario;
usuarioHeap->dizOla();
delete usuarioHeap; // Lembre-se de liberar a memória!
// Alocação na stack
Usuario usuarioStack;
usuarioStack.dizOla();
return 0;
}
No exemplo acima, usuarioHeap
é alocado na heap e precisa ser deletado manualmente, enquanto usuarioStack
é alocado na stack e será automaticamente destruído quando sair do escopo.
Espero ter ajudado e bons estudos!