Konstruktory i destruktory ostatni przykad na stronie
Ostatnio zmodyfikowano 2013-10-11 22:44
tookie009 Temat założony przez niniejszego użytkownika |
Konstruktory i destruktory ostatni przykad na stronie » 2013-10-10 13:16:36 Witam, wanie ucze sie objektowosci. Stanalem przy lekcji 4 :)) Jest tam taki przykladzik: #include <iostream>
class Test { public: Test() { std::cout << "Konstruktor" << std::endl; } Test( const Test & ) { std::cout << "Konstruktor kopiujacy" << std::endl; } ~Test() { std::cout << "Destruktor" << std::endl; } };
int main() { { Test t; } std::cout << "---" << std::endl; { Test t1; Test t2 = t1; } }
Za zadne skarby nie moge zrozumiec :) skopiowalem sobie do swojego komplikatora, i odkrylem, ze znaczenie maja {}. Do teraz rozumiealem to po prostu tak, ze tworzymy w funkcji main nowe obiekty klasy Test. Nie wywolujemy zadnych metod ani nic, wiec wyszedlem z zalozenia, ze nie powinienem nic dostawac na ekranie. Ale cos zle zrozumialem. Moglby mi ktos to lepiej wytlumaczyc ? Z gory dzieki |
|
pekfos |
» 2013-10-10 13:34:39 tworzymy w funkcji main nowe obiekty klasy Test. |
Konstruktor jest automatycznie wywoływany podczas tworzenia obiektu. |
Itd.. Kompilatora. |
|
Matej |
» 2013-10-10 19:25:46 Prócz tego co napisał pekfos. Proponuję poczytać czym jest sterta i stos oraz nauczyć się debugować, pozwala to zrozumieć co się dzieje ze zmiennymi w pamięci. Poćwicz też ze wskaźnikami. int main() { { Test * t = new Test(); delete t; } std::cout << "---" << std::endl; { Test * t1 = new Test(); Test * t2 = new Test( * t1 ); delete t1; delete t2; } }
|
|
b00rt00s |
» 2013-10-11 19:47:29 Konstruktor jest zawsze wywoływany przy tworzeniu obiektu, a destruktor jest zawsze wykonywany przy jego niszczeniu. W przypadku obiektów zaalokowanych na stosie, zniszczenie nastąpi przy wyjściu z zakresu. Wstawienie znaku { oznacza wejście do zakresu, a wstawienie znaku } wyjście z zakresu. Przyglądnij się gdzie w podanym przykładzie występują zakresy, to zrozumiesz co się dzieje.
Zakresy nie mają natomiast znaczenia gdy zmienne tworzone są na stercie, czyli z wykorzystaniem słowa kluczowego new. Takie zmienne musisz zniszczyć samodzielnie używając słowa kluczowego delete. Jeśli tego nie zrobisz, to pamięć nigdy nie zostanie zwolniona i będziesz miał do czynienia z tzw. wyciekiem pamięci. |
|
tookie009 Temat założony przez niniejszego użytkownika |
» 2013-10-11 22:44:23 Itd..
komplikatora Kompilatora.
| Teraz sam się śmieję :))). Dziękuję za rady, w międzyczasie rozkminiałem to wszystko i zrobiło mi się DUŻO jaśniej. Odnośnie sterty i stosu czytałem dawno dawno temu i mniej więcej kojarzę. Debuggera faktycznie muszę się pouczyć. Mam nadzieję, że wygoogleje coś po polsku. Dostałem duży projekt i muszę zrozumieć, jak on działa. Projekt z biblioteką TThread, co na chwilę obecną stanowi dla mnie całkowitą magię. Przestawię moje najbliższe kroki nauki: doczytanie o dziedziczeniu, funkcjach wirtualnych oraz zrozumienie idei listy jednokierunkowej, która w projekcie, którego chcę pojąć wystpępuje parokrotnie. Jeszcze raz dziękuje za pomoc. |
|
« 1 » |