No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

El ciclo de vida de un objeto

9/16
Recursos

Aportes 7

Preguntas 3

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

En el constructor, si yo coloco

Persona(string nombre, int edad) {
      nombre = nombre;
      edad = edad;
    }

Me sale esto:

.
En cambio, si cambio un poco el constructor

Persona(string name, int age) {
      nombre = name;
      edad = age;
    }

Me sale esto:

.
Y si le aplico a this en el constructor

Persona(string nombre, int edad) {
      this->nombre = nombre;
      this->edad = edad;
    }

Me sale esto:

.
En el primer escenario, el nombre de la variable 鈥渘ombre鈥 es diferente a 鈥渘ame鈥, y por eso te guarda los datos
.
En el segundo escenario, como ambas son iguales, como que no te capta los datos y por ello no te los guarda (me gustaria saber m谩s acerca de esto, lo que mencione es una deduccion
.
En el tercer escenario, con this accede a las variables directa del objeto y te guarda los datos.
.
Entiendo el por qu茅 del primer y tercer escenario. Pero el segundo Como 鈥渨tf? Why? 馃槮鈥

El destructor es un m茅todo de la clase que se usa para destruir objetos del tipo de la clase, no tiene par谩metros de entrada ni valor de retorno. Para declarar un destructor se utiliza el caracter virgulilla (~) seguido del nombre la clase, es decir, el destructor tambi茅n se denomina del mismo modo que la clase. Los destructores se ejecutan autom谩ticamente justo cuando un objeto alcanza el l铆mite de su tiempo de vida.

Ese tiempo de vida est谩 definido por el contexto (scope) donde se ha declarado el objeto. Un contexto (scope) est谩 delimitado en C++ por las llaves { y }.

Los destructores son especialmente 煤tiles para destruir objetos de almacenamiento din谩mico, es decir, aquellos para los que se reserva memoria con ayuda de un apuntador y el operador new.

~ <-- Se llama virgulilla y la puedes hacer con : alt + 126

Liberar los recursos en el destructor (delete):
Esto es lo que Bjarne Stroustrup defini贸 como RAII (Resource Adquisition Is Initialization) por lo que cada clase es responsable de adquirir recursos y liberarlos para evitar los memory leaks.
En lenguajes como Java no hace falta liberar la memoria en un destructor porque el Garbage Collector se encarga de liberarla.
C++ no tiene GC por lo que es mas eficiente, pero a la vez mas peligroso si no se siguen estas pr谩cticas.

En nuestro destructor liberamos la memoria que reservamos din谩micamente, es decir punteros.

No se preocupen, Diana solo se fue de la sala de chat. 馃弮馃徎鈥嶁檧锔

Por ejemplo, en el siguiente c贸digo libero el espacio del nombre en el destructor (porque lo implemente como un puntero) 馃槂:

#include <iostream>
#include <string>

using namespace std;

// Declaracion de la clase Persona
class Persona
{
public:
    string *nombre;

    Persona(string *nombre);
    ~Persona();

    void saludar();
};

// Constructor
Persona::Persona(string *nombre)
{
    this->nombre = nombre;
}

// Destructor
Persona::~Persona()
{
    cout << *nombre << " se ha ido 馃槩" << endl;
    delete nombre;
}

// Implementacion de saludar
void Persona::saludar()
{
    cout << "Hola soy " << *nombre << " 馃憢!" << endl;
}

int main()
{
    string *puntero_al_nombre = new string("Diana");
    Persona *p = new Persona(puntero_al_nombre);
    p->saludar();
    delete p;
    cout << "Fin del programa" << endl;
}

Un aporte que es muy bueno 驴Alguien se acuerda del clrscr (limpiar pantalla en algunos lenguajes), para este caso use

system("clear");

Tiene el mismo efecto, 煤senlo en los programas les va ayudar

Les dejo el c贸digo

#include <iostream>
#include <string>

using namespace std;

class Person {
public:
  string name;
  int age;
  Person(string n, int a) {
    name = n;
    age = a;
  }
  ~Person() { cout << "Destruction" << endl; }
  void say_hi() { cout << name << endl; }
};

int main() {
  Person p = Person("Zero", 14);
  p.say_hi();
}