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.