lszk Napisano Marzec 1, 2006 Zgłoszenie Share Napisano Marzec 1, 2006 Stworzyłem sobie prostą klasę, której obiekty tworze poprzez new, oraz normalnie. Kodzik: #include <iostream> using namespace std; class osoba { public: char nazwisko[40]; char imie[20]; void dodaj(); void wypisz(); }; void osoba::dodaj() { cin >> nazwisko; cin >> imie; } void osoba::wypisz() { cout << " nazwisko " << nazwisko << '\n'; cout << " imie " << imie << '\n'; } int main() { osoba *lszk = new osoba(); lszk->dodaj(); lszk->wypisz(); cout << endl << endl; osoba *lszk2 = new osoba(); lszk2->dodaj(); lszk2->wypisz(); cout << endl << endl; osoba lszk3; lszk3.dodaj(); lszk3.wypisz(); cout << endl << endl; cout << sizeof(lszk) << endl << sizeof(lszk2) << endl << sizeof(lszk3); } No i teraz mam pytanie, dlaczego obiekt tworzony "normanie" zajmuje dużo więcej, niż obiekt tworzony przez wskaźnik. Chciałbym, aby mi to ktoś wyjaśnił. Wiem, że operator new alokuje pamięć, a jak ona jest alokowana w tym ostatnim przykładzie? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
montresol Napisano Marzec 1, 2006 Zgłoszenie Share Napisano Marzec 1, 2006 Ehem.. ostatni raz w C/C++ to grzebalem dawno temu, ale jak pamietam to: osoba *lszk = new osoba(); sizeof(lszk) // rozmiar wskaznika na obiekt sizeof(*lszk) // rozmiar obiektu na ktory wskazuje wskaznik Pozdrawiam, montresol Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
lszk Napisano Marzec 1, 2006 Autor Zgłoszenie Share Napisano Marzec 1, 2006 A to rzeczywiście wiele wyjaśnia ;-) Dobrze wiedzieć. Skoro to jest już wyjaśnione, to mam jeszcze jedno pytanie. Dlaczego właściwie powinno się używać tego new? W qt widze, że praktycznie co się da, to się tworzy poprzez te new. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
!Ci Napisano Marzec 1, 2006 Zgłoszenie Share Napisano Marzec 1, 2006 Ogolnie tworzac obiekt za pomoca new tworzysz obiekt na stercie a nie na stosie. Taki obiekt rzecz jasna powinienes usuwac przed zakonczeniem dzialania programu, tak aby nie bylo wyciekow pamieci. Jednak QT zawiera mechanizmy, ktore zrobia to za Ciebie. Oczywiscie jesli zrobisz to samemu nic nie szkodzi, nawet lepiej bedzie bardziej oczywiste. Zauwaz ze mozesz obiekty tej bibioteki tworzyc dynamicznie jak i statycznie, ale majac do dyspozycji ta pierwsza (z taka a nie inna obsluga) dlaczego z niej nie korzystac. Zawsze lepiej jak zrobisz cos na wskaznikach.... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
montresol Napisano Marzec 1, 2006 Zgłoszenie Share Napisano Marzec 1, 2006 A to rzeczywiście wiele wyjaśnia ;-) Dobrze wiedzieć. Skoro to jest już wyjaśnione, to mam jeszcze jedno pytanie. Hmm... to dla Ciebie novum? Uczysz sie z jakiejs ksiazki / wykladow etc? Bo przeciez roznica miedzy obiektem, a jego wskaznikiem to absolutne podstawy poruszane w pierwszych rozdzialach wiekszosci ksiazek dot. C++. Dlaczego właściwie powinno się używać tego new? W qt widze, że praktycznie co się da, to się tworzy poprzez te new Glownie - o ile mnie pamiec nie zawodzi - chodzi o wydajnosc (konstruktor kopiujacy itp.), czas zycia obiektow oraz miejsce alokacji pamieci. Zdaje sie, ze mozna tez przeciazyc funkcje new odpowiedzialna za przydzielenie pamieci w konkretnym przypadku. Zapraszam do ksiazek:) Pozdrawiam, montresol Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
lszk Napisano Marzec 1, 2006 Autor Zgłoszenie Share Napisano Marzec 1, 2006 Coś mi się tam chyba obiło, ale nie można pamiętać wszystkiego ;-) A moja powyższa reakcja była skierowana do powyższego przykładu. Co do tego new, to się będę musiał zainteresowac. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@Sorror Napisano Marzec 3, 2006 Zgłoszenie Share Napisano Marzec 3, 2006 Przeładowanie new [void *operator new( type size, user args );] faktycznie daje duże możliwości w porównaniu do m/l-ców z C. Mała errata do jednej z powyższych wypowiedzi - konstruktor kopiujący niewiele tu ma do rzeczy, o ile nie mówimy o nieszczęsnych ret-callach Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
happy-angel Napisano Marzec 17, 2006 Zgłoszenie Share Napisano Marzec 17, 2006 Ja z tymi wskaznikami borykam sie tyle czasu i nadal nie rozumiem co nam daje to ze bedziemy operowac na nich a nie na zmiennych. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
!Ci Napisano Marzec 20, 2006 Zgłoszenie Share Napisano Marzec 20, 2006 Daje nam to bardzo duzo. Przede wszystkim operujac na zmiennych lokalnych nie trzeba alokowac nowych obszarow pamieci, mozna latwo operowac na tablicach,.... i tak moznaby wymieniac jeszcze z pol godziny. Z czasem odpowiedz sama sie nasuwa - dlaczego uzyc wskaznika... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się