Re: frage zu objecten in c++

Markus Ruettimann <[email protected]>
Newsgroups gmane.linux.suse.programming
Organization Private
Message-ID <[email protected]>
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.

-- 
Um die Liste abzubestellen, schicken Sie eine Mail an:
    [email protected]
Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.