• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wywołanie destruktora.

Object Storage Arubacloud
+1 głos
1,259 wizyt
pytanie zadane 5 czerwca 2015 w Inne języki przez Tom::catch_Jerry(); Użytkownik (950 p.)

Witam,

Piszę program obiektowy przechowujący punkty w przestrzeni trójwymiarowej.

Zawartość pliku main.cpp :

#include <iostream>
#include "ololo.h"

using namespace std;

class Punkt;

int main()
{
    Punkt A("A");
    cout<<"Stworzy\210em obiekt klasy Punkt!"<<endl;
    return 0;
}

         Pliku ololo.h :

#include <iostream>

using namespace std;

class Punkt
{
    double x,y,z;
    string nazwa;
public:
    Punkt(string="O",double=0,double=0,double=0);
    ~Punkt();
};

Oraz pliku ololo.cpp :

#include <iostream>
#include "ololo.h"

using namespace std;

Punkt::Punkt(string a,double b,double c,double d)
{
    if(a=="")
    {
        cout<<"error!"<<endl;
    }
    else
    {nazwa=a;
    x=b;
    y=c;
    z=d;}
}
Punkt::~Punkt()
{
    cout<<"A teraz go ju\276 nie ma!";
}

Moje pytanie brzmi: dlaczego przy uruchomieniu programu otrzymuję kominikat:

Stworzyłem obiekt klasy Punkt!
A teraz go już nie ma!
Process returned 0 (0x0)   execution time : 0.094 s
Press any key to continue.?

skoro nie wywoływałem destruktora w ciele funkcji main()?
 

3 odpowiedzi

+2 głosów
odpowiedź 5 czerwca 2015 przez niezalogowany
wybrane 5 czerwca 2015 przez Tom::catch_Jerry();
 
Najlepsza
Dokładnie tak jak już ktoś napisał: w main() masz napisanie ,,Stworzyłem obiekt klasy Punkt!", a zaraz po tej instrukcji program się kończy. Skoro program się kończy, to dla wszystkich obiektów jakie istnieją (ty masz tylko jeden) wywołują się ich destruktory, a w destruktorze masz napisanie ,,A teraz już go nie ma!" i wtedy program się kończy. I też tak jak już ten sam ktoś napisał: czas życia obiektu globalnego jest do końca programu, czas życia obiektu lokalnego (czyli np. w funkcji) jest do końca tej funkcji. To tyle ;) Dużo powtórzyłem i dodałem trochę od siebie :P
+4 głosów
odpowiedź 5 czerwca 2015 przez Dorion300 Szeryf (90,250 p.)

Wszystkie obiekty są niszczone jak program się kończy albo funkcja.

Jeśli obiekt jest globalny - niszczy się jak program się kończy.

Jeśli obiekt jest lokalny (W funkcji) - niszczy się jak funkcja się kończy.

 

A destruktor jest wywoływany jak obiekt jest niszczony.

0 głosów
odpowiedź 5 czerwca 2015 przez Dash Nałogowiec (29,650 p.)
Jako dygresję dodam, że warto poczytać o zakresie ważności. Tyczy się on  nie tylko obiektów, ale m.in. zmiennych. Przy większych programach przyprawia to o ból głowy, bez wiedzy o zakresach ważności i czasach życia obiektów (bytów), pisząc na ślepo, nic dobrego z tego nie wyniknie.

Podobne pytania

0 głosów
1 odpowiedź 158 wizyt
+1 głos
3 odpowiedzi 352 wizyt
pytanie zadane 20 grudnia 2020 w C i C++ przez dominik195k Obywatel (1,030 p.)
0 głosów
3 odpowiedzi 178 wizyt

92,632 zapytań

141,502 odpowiedzi

319,882 komentarzy

62,015 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...