declaración de retorno vs exit() en main()

En C++, ¿cuál es la diferencia entre exit(0) y return 0 ?

Cuando se usa exit(0) para salir del programa, no se llama a los destructores para objetos no estáticos de ámbito local. Pero se llama a los destructores si se usa return 0.

Programa 1 – – usa exit(0) para salir

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
  
using namespace std;
  
class Test {
public:
  Test() {
    printf("Inside Test's Constructor\n");
  }
  
  ~Test(){
    printf("Inside Test's Destructor");
    getchar();
  }
};
  
int main() {
  Test t1;
  
  // using exit(0) to exit from main
  exit(0);
}

Salida:
Constructor de prueba interna

Programa 2: utiliza el retorno 0 para salir

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
  
using namespace std;
  
class Test {
public:
  Test() {
    printf("Inside Test's Constructor\n");
  }
  
  ~Test(){
    printf("Inside Test's Destructor");
  }
};
  
int main() {
  Test t1;
  
   // using return 0 to exit from main
  return 0;
}

Salida:
Constructor de
prueba interna Destructor de prueba interna

Llamar a los destructores a veces es importante, por ejemplo, si el destructor tiene un código para liberar recursos como cerrar archivos.

Tenga en cuenta que los objetos estáticos se limpiarán incluso si llamamos a exit(). Por ejemplo, vea el siguiente programa.

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
  
using namespace std;
  
class Test {
public:
  Test() {
    printf("Inside Test's Constructor\n");
  }
  
  ~Test(){
    printf("Inside Test's Destructor");
    getchar();
  }
};
  
int main() {
  static Test t1;  // Note that t1 is static
  
  exit(0);
}

Salida:
Constructor de
prueba interna Destructor de prueba interna

Contribución de indiarox . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *