Mailinglist Archive: opensuse-programming-de (128 mails)

< Previous Next >
Re: frage zu objecten in c++
  • From: Markus Ruettimann <toomy@xxxxxxxxxx>
  • Date: Sat, 26 Nov 2005 13:25:33 +0100
  • Message-id: <200511261325.33300.toomy@xxxxxxxxxx>
On Saturday 19 November 2005 01:22, Jörg Pauly wrote:
Hi,
Obwohl ich mich anfangs nicht in diese disskussion einmnischen wollte, muss
ich nun doch noch meinen senf dazugeben:

1:) Objektinizialiseirung: Ein objekt nach seiner instanzierung noch mit einem
"default" Wert zu initialisieren, ist in einer objektorientierten Sprache
absolut ueberfluessig. Dazu gibt es Konstruktoren. Falls einer solchen Code
oder sogar Klassen schreibt welche eine solche Initialisierung notwendig
machen, hat einen grundlegenden Gedanken der objektorientierten Programierung
noch nicht richtig verstanden. Er heist Kapselung.

2:) Speicher zu nullen: Speicher eines objektes zu nullen ist in 99.9% aller
Faelle ebenfals ueberfluessig. Es ist dort notwendig, wo objekte
entschluesselte daten oder passwoerter enthalten. Geloescht wird solcher
Speicher dann allerdings nicht einfach durch zuweisung einer NULL an ein
objekt, sondern es muss der ganze belegte Speicherbereich geloescht werden.
Die groesse seines Speicherbereichs liefert sizeof(..);
Nebenbei: Enhalten Objekte wirklich solche Daten, wird der Speicher sowieso
nicht vom normal Heap genommen, sondern Pageweise allokiert und gepinnt, da
er dann nicht auf die Platte ausgelagert werden darf. Dazu gibt es aber
Bibliotheken.

3:) Zeiger zu ueberpruefen. Zeiger direkt zu verwenden ist schon fahrlaessig,
diesen dann aber nicht noch vor dedem benutzen auf NULL zu ueberpruefen,
vorsaetzlich, eine solche Person hat noch niemals einen Programmabsturz auf
einer Plattform suchen muessen wo es weder einer Stackdump noch debugger
gibt. Wenn Zeiger verwenden werden muessen, dann IMMER mit "smart pointers".
Wer das beherzigt, produziert auch weniger Speicherlecks. Guckst du hier
www.boost.org

Ansonsten viel Spass beim Programmieren!
Markus





> Am Freitag, 18. November 2005 15:55 begab es sich, daß Michael Wenger
>
> folgendes in den Rechenknecht kloppte:
> > Sorry, für das überflüssige Posting. Jörg Pauly hat ja schon alles
> > richtig gestellt.
>
> Überflüssig? Nein, gewiss nicht, das ist ja hier kein Chat.
>
> Aber mir fällt gerade eine von mir gerne genutzte reale Anwendung ein, bei
> der ich dereferenziert nulle:
>
> Ich habe die (dumme) Angewohnheit, alle wichtigen Variabelen bei der
> Konstruktion eines Objektes zu initialisieren. Ist dann da z.B. ein
> QString* dabei, dann mache ich oft dies hier:
>
> m_myString = new QString;
> *m_myString = NULL;
>
> Das Resultat ist ein leerer String. Klar, das ginge auch mit
>
> m_myString = new QString('');
>
> Aber jeder hat ja so seine Vorlieben.... ;-)
>
> ---
> Grüsse aus Meissen
> Jörg Pauly

--

There is a Massachusetts law requiring all dogs to have their hind legs
tied during the month of April.

< Previous Next >
Follow Ups