Article View: pl.comp.objects
Article #4721Re: Prawda o C++
From: A. Hajderek
Date: Wed, 20 Jan 1999 19:22
Date: Wed, 20 Jan 1999 19:22
55 lines
2978 bytes
2978 bytes
>1.)
>struct aaa
>{
> int a;
> int b;
>};
>
>int main ()
>{
> aaa a;
> write (fd, &a, sizeof(aaa));
>}
>
>2.)
>struct aaa
>{
> int a;
> int b;
> int & aa;
> aaa() : aa(a) {}
>};
>
>int main ()
>{
> aaa a;
> write (fd, &a, sizeof(aaa));
>}
Problem z tym przykladem jest taki, ze jest on zalezny od implementacji
i nieprzenosny. C++ nie gwarantuje niczego jesli chodzi o rozmiar obiektu.
Wystarczy, ze dodamy jedna funkcje virtualna do prostej klasy i juz
mamy inny rozmiar - obiekt musi niesc informacje o powiazaniu z tablica
funkcji virtualnych.
Ponadto zaleznie od typu architektury kompilatory
moga stosowac roznego rodzaju wyrownywanie do pelnych adresow, itp.
Nawet kompilatory zwyklego C na intela pozwalaja kontrolowac sposob
pakowania struktur i trzeba bardzo uwazac zanim sie przyjmie jakies
zalozenie.
Jesli chodzi o C++ to jedyna bezpieczna metoda transferu zawartosci
obiektu to pliku jest implementacja odpowiedniej metody (chocby
operatora << dla iostream).
Ogolnie - w znakomitej wiekszosci przypadkow rozmiar obiektu w C++
nie powinien nikogo interesowac - bo nie ma w tej dziedzinie zadnych
gwarancji.
Fakt, ze dodanie skladowej referencyjnej do klasy zmienilo rozmiar obiektu
nie jest niczym nadzwyczajnym - jesli obiekt ma zawierac w sobie informacje
o innym obiekcie (czyli referencje - odnosnik), to musi byc dla tej
informacji
zarezerwowane jakies miejsce - np. 32 bity.
Pozdrawiam,
Andrzej
Technical Details
Message-ID:
<916860225.14810.0.nnrp-02.c2d9616c@news.demon.co.uk>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!orion.cst.tpsa.pl!news.task.gda.pl!news.icm.edu.pl!uw.edu.pl!newsgate.cistron.nl!het.net!isdnet!news-raspail.gip.net!news-lond.gip.net!news.gsl.net!gip.net!dispose.news.demon.net!demon!news.demon.co.uk!demon!melisa.lscope.co.uk!not-for-mailReferences:
<77o3bl$j0q$1@polonez.man.lodz.pl> <369FDDCE.7B94748A@interdata.com.pl> <77q41i$j7f$1@polonez.man.lodz.pl> <wU3o2.25549$U1.4744058@news.tpnet.pl> <77qi2q$42a$1@polonez.man.lodz.pl> <77qk38$ken$1@zeus.polsl.gliwice.pl> <77vn97$j3l$1@polonez.man.lodz.pl> <77vsod$l0u$1@zeus.polsl.gliwice.pl> <36A3823B.1950@bear.com> <78073r$t5p$1@zeus.polsl.gliwice.pl> <781vtm$9l8$3@polonez.man.lodz.pl> <36a58e24.0@news.vogel.pl> <916854946.11215.0.nnrp-02.c2d9616c@news.demon.co.uk> <36a62532.0@news.vogel.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!orion.cst.tpsa.pl!news.task.gda.pl!news.icm.edu.pl!uw.edu.pl!newsgate.cistron.nl!het.net!isdnet!news-raspail.gip.net!news-lond.gip.net!news.gsl.net!gip.net!dispose.news.demon.net!demon!news.demon.co.uk!demon!melisa.lscope.co.uk!not-for-mail From: "A. Hajderek" <andrew@logicscope.net> Newsgroups: pl.comp.objects Subject: Re: Prawda o C++ Date: Wed, 20 Jan 1999 19:22:18 -0000 Message-ID: <916860225.14810.0.nnrp-02.c2d9616c@news.demon.co.uk> References: <77o3bl$j0q$1@polonez.man.lodz.pl> <369FDDCE.7B94748A@interdata.com.pl> <77q41i$j7f$1@polonez.man.lodz.pl> <wU3o2.25549$U1.4744058@news.tpnet.pl> <77qi2q$42a$1@polonez.man.lodz.pl> <77qk38$ken$1@zeus.polsl.gliwice.pl> <77vn97$j3l$1@polonez.man.lodz.pl> <77vsod$l0u$1@zeus.polsl.gliwice.pl> <36A3823B.1950@bear.com> <78073r$t5p$1@zeus.polsl.gliwice.pl> <781vtm$9l8$3@polonez.man.lodz.pl> <36a58e24.0@news.vogel.pl> <916854946.11215.0.nnrp-02.c2d9616c@news.demon.co.uk> <36a62532.0@news.vogel.pl> NNTP-Posting-Host: melisa.lscope.co.uk X-NNTP-Posting-Host: melisa.lscope.co.uk:194.217.97.108 X-Trace: news.demon.co.uk 916860225 nnrp-02:14810 NO-IDENT melisa.lscope.co.uk:194.217.97.108 X-Complaints-To: abuse@demon.net X-Newsreader: Microsoft Outlook Express 4.72.2106.4 X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4 Lines: 58 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit