Automatyczne zwalnianie zmiennych - która pierwsza?

Odpowiedz Nowy wątek
Wega
2011-05-23 22:50
Wega
0

Cześć.
Szukałem, szukałem, aż w końcu znalazłem niedopatrzenie w moim programie i powód wyświetlania kosmicznych wartości podczas wykonywania destruktorów. Przejdę więc do rzeczy. Mamy taki kod:

int main()
{
    class A() {};
    class B(){};

    A obj_a;
    B obj_b;
}

Więc pierwsze zostanie zniszczone obj_b, a później obj_a, ale czy zawsze?

O ile dobrze pamiętam to jest to gwarantowane przez standard, ale nie chcę mi się tego sprawdzać (teraz ma powyżej 1000 stron). - Zjarek 2011-05-23 23:10

Pozostało 580 znaków

2011-05-23 23:02

Rejestracja: 11 lat temu

Ostatnio: 6 lat temu

0

Nie prościej sprawdzić samemu - w destruktorze sobie coś wypisać?


Potrzebujesz programy do szkoły/na zaliczenie? Pomocy podczas kolosa lub egzaminu?
Zamów go!

http://proogramy.c0.pl
TIAS jest dobre do eksperymentowania i czynienia obserwacji, ale te niekoniecznie najlepsze są jako podstawa do wyciągania wniosków w kontekście języków programowania, a szczególnie C i C++. ;) - Xupicor 2011-05-24 01:30

Pozostało 580 znaków

Wega
2011-05-23 23:14
Wega
1
Blood napisał(a)

Nie prościej sprawdzić samemu - w destruktorze sobie coś wypisać?

W jakiej kolejności to wiem, podałem. Tylko, czy zawsze w takiej, czy przy użyciu innego kompilatora nie będzie na odwrót?

Pozostało 580 znaków

2011-05-24 01:25

Rejestracja: 11 lat temu

Ostatnio: 3 lata temu

0

Zdaje się, że standard gwarantuje, że zmienne automatyczne "niszczone" będą w kolejności odwrotnej do ich deklaracji.
http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.2
A nawet nie zdaje się, a na pewno. ;)

ISO C++03 6.6.2 napisał(a)

On exit from a scope (however accomplished), destructors (12.4) are called for all constructed objects with
automatic storage duration (3.7.2) (named objects or temporaries) that are declared in that scope, in the
reverse order of their declaration.


edytowany 1x, ostatnio: Xupicor, 2011-05-24 01:26

Pozostało 580 znaków

Wega
2011-05-24 08:43
Wega
0

Dzięki bardzo. :)

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0