"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Instanciação de objeto C++: pilha vs. heap: `novo` ou não `novo`?

Instanciação de objeto C++: pilha vs. heap: `novo` ou não `novo`?

Publicado em 2024-12-21
Navegar:764

C   Object Instantiation:  Stack vs. Heap: `new` or Not `new`?

Instanciando objetos: com ou sem novo

Ao criar objetos em C , os programadores podem usar o operador "new" ou instanciá-los diretamente sem ele. Embora ambas as abordagens criem objetos, elas diferem em vários aspectos importantes.

Sem Novo

Instanciar um objeto sem "novo" reserva diretamente memória para ele no escopo atual. Isso normalmente é feito na pilha e resulta em um objeto com vida útil automática. O objeto é criado e destruído automaticamente dentro do escopo em que foi definido.

Por exemplo:

Time t(12, 0, 0); // t is a Time object

No código acima, o objeto "Time" "t" é criado na pilha e seu tempo de vida está vinculado ao escopo atual.

Com New

Usar "new" para instanciar um objeto aloca memória para ele dinamicamente no heap. Isso permite que o objeto seja criado e destruído explicitamente quando sua vida útil terminar. O ponteiro "t" armazena o endereço heap do objeto.

Por exemplo:

Time* t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object

Aqui, o ponteiro "t" recebe o endereço de heap do objeto "Time" recém-criado. A vida útil do objeto é independente do escopo e persiste até que o operador "delete" seja usado para liberar sua memória.

Principais diferenças

  • Alocação de memória : Objetos criados sem "novo" alocam memória na pilha, enquanto "novo" aloca memória na pilha heap.
  • Vida útil: Objetos instanciados sem "novo" têm vida útil automática, enquanto objetos criados com "novo" têm vida útil dinâmica e devem ser excluídos manualmente.

É importante observar que essas diferenças são específicas da implementação, pois o padrão C não define explicitamente o comportamento da pilha e do heap. No entanto, na maioria das implementações práticas, a memória stack é usada para objetos automáticos e a memória heap é usada para objetos dinâmicos.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3