1. ¿Qué es destructor ?
Respuesta Destructor es una función miembro a la que se llama cuando un objeto se elimina/destruye o queda fuera del alcance.
class String { private: char* s; int size; public: String(char*); // constructor ~String(); // destructor };
2. ¿Cuál es el propósito de usar un destructor en C++?
Respuesta El objetivo principal de destructor es liberar todos los recursos (archivos abiertos, sockets abiertos, conexiones de base de datos, bloqueos de recursos, etc.) que se asignan durante la vida útil de su objeto.
// CPP program to demonstrate destructors. class Geeks { private: // a private-access pointer to integer int* myPrvIntPtr; public: Geeks() { // default constructor myPrvIntPtr = new int(0); // allocate a new integer, place its address in myPrvIntPtr } ~Geeks() { // de-allocate the integer whose address // is stored in myPrvIntPtr delete myPrvIntPtr; } };
3. ¿Cuál es el uso de un constructor?
Constructor es una función especial que tiene el mismo nombre que el nombre de la clase. Se llama al constructor en el momento de crear el objeto para su clase. El constructor se utiliza para inicializar las variables de instancia de un objeto mientras se crea. Constructor también se usa para crear tablas virtuales para funciones virtuales.
4. ¿Qué pasa si no uso el constructor de copias? ¿Dónde crea problema?
Consulte el constructor de copia
5. ¿El compilador de C++ crea un constructor predeterminado cuando escribimos el nuestro?
En C++, el compilador por defecto crea un constructor por defecto para cada clase. Pero, si definimos nuestro propio constructor, el compilador no crea el constructor predeterminado.
6. ¿Cuál es el orden de ejecución del constructor en C++?
Respuesta El primer constructor de clase base se ejecuta y luego el constructor de clase derivada, por lo que la ejecución ocurre de arriba a abajo en el árbol de herencia.
7. ¿Cuál es el orden de ejecución del destructor en C++?
Respuesta Destructor de clase generalmente derivado, y luego destructor de clase base. Excepto en el caso de que estemos tomando un objeto de clase derivado en un puntero de clase base (o variable de referencia), y olvidemos dar la palabra clave virtual para el destructor de clase base. Ver destructor virtual para más detalles.
8. ¿Podemos tener destructores virtuales? Si es así, ¿cuál es el uso de destructores virtuales?
Respuesta Si podemos. Esto es para asegurarse de que se llama al destructor de clase correcto en tiempo de ejecución. Específicamente cuando usamos el puntero de la clase base o la referencia para contener el objeto de la clase derivada. Si no tenemos un destructor virtual, terminará llamando solo al destructor de clase base.
// CPP program without virtual destructor // causing undefined behavior #include <iostream> using namespace std; class base { public: base() { cout << "Constructing base \n"; } ~base() { cout << "Destructing base \n"; } }; class derived : public base { public: derived() { cout << "Constructing derived \n"; } ~derived() { cout << "Destructing derived \n"; } }; int main(void) { derived* d = new derived(); base* b = d; delete b; getchar(); return 0; }
Publicación traducida automáticamente
Artículo escrito por Yogesh Shukla 1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA