🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #1264

Re: Ueberladen ... Problem ... Dringend

#1264
From: Claus Faerber
Date: Sun, 14 Jan 1996 09:44
68 lines
3118 bytes
Joern Sierwald <Sierwald@tu-harburg.d400.de> schrieb zu
Re: Ueberladen ... Problem ... Dringend
in Artikel <30F50BC9.754D@tu-harburg.d400.de> vom 11.01.96:
> Dietmar Kuehl wrote:
>
> > Hi,
> > Karsten Baensch (kba@hrz.tu-chemnitz.de) wrote:
> > : Selbst der Destruktor ist nicht ganz korrekt. Es muss heissen:
> > : vektor::~vektor()
> > : {
> > :   delete[] pointer;
> > : }
> > : (Fuer den Fall des int-Arrays haette der 'normale' delete-Operator
> > : vielleicht auch funktioniert.
>
> > * N * E * I * N * !!!! Auf Array Objects MUSS IMMER delete[] angewendet
> > werden! IMMER! KEINE AUSNAHME!  Das es uU. mit einem bestimmtem
> > Compiler funktioniert heisst nicht, dass es "vielleicht auch
> > funktioniert"!
>
> Cool bleiben. Sag mir auf welchem Compiler/System
>
> char* s= new char[10];
> delete s; // Also ohne []
>
> schiefgeht. Na komm, irgendeins. Und wenn du keins findest, dann
> sag doch mal, was schiefgehen KOENNTE.

Ich bin zwar jemand anders, aber da kann EINIGES schiefgehen:

Weil der Compiler nicht weiss, dass es sich nicht um ein Array  
handelt, wird new mit dem Parameter sizeof(int) aufgerufen, gibt  
also nur _einen_ int frei.

Wenn Du [] schreibst, wird das ganze fuer ein Array aufgerufen,  
hier muss dann irgendjemand die Groesse des Arrays (die bei den  
meisten Compilern bei *(((size_t*)s)-1) stehen duerfte)  
herausfinden und dann den globalen new-Operator mit dem Parameter
sizeof( int ) * <anz. Elemente> + <evt. zusatzlicher Speicher zum  
Speichern der Arraygroesse> aufrufen.

Ist die Speicherverwaltung nicht besonders optimiert, speichert  
sie natuerlich auch bei nicht-Arrays die Groesse des Objekts in  
Bytes ab, dann ist's voellig egal, aber Du kannst nie davon  
ausgehen, dass gerade dein Compiler nicht doch ein Speicherleck  
produziert.

Und wenn C schon so eine Syntax zum Unterscheiden von Arrays und  
einzelnen Variablen definiert, sollte man sie auch benutzen.
Sonst kommt womoeglich eine boese Ueberraschung, wenn Du den  
Compiler oder auch nur die Speicherverwaltung wechselst.

> Es wird schliesslich in beiden
> Faellen derselbe globale operator new aufgerufen. (AT&T 2.1, komm jetzt
> nicht
> mit irgendwelchen ANSI C++ Gags).

Was soll das nun wieder heissen? Willst Du vielleicht behaupten,  
irgend so ein AT&T Firmenstandard waere das einzig gueltige C++ ??

> Joern

Claus

------------------------------------------------------------------------
Claus Andre Faerber - claus@faerber.muc.de - http://www.muc.de/~cfaerber
                    >>> Windows - best before 95 <<<
------------------------------------------------------------------------
Technical Details
Message-ID: <60prT19JcDB@faerber.muc.de>
Path: arc1-ca.pugleaf.net!faerber.muc.de!claus
References: <4cqs22$2ou@rztsun.tu-harburg.de> <4ctel8$fv8@pyrrhus-f.hrz.tu-chemnitz.de> <30f2a556.0@news.uni-konstanz.de> <30F50BC9.754D@tu-harburg.d400.de>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!faerber.muc.de!claus
Date: 14 Jan 1996 10:44:00 +0100
From: claus@faerber.muc.de (Claus Faerber)
Newsgroups: de.comp.lang.c++
Message-ID: <60prT19JcDB@faerber.muc.de>
References: <4cqs22$2ou@rztsun.tu-harburg.de>
 <4ctel8$fv8@pyrrhus-f.hrz.tu-chemnitz.de>
 <30f2a556.0@news.uni-konstanz.de> <30F50BC9.754D@tu-harburg.d400.de>
Subject: Re: Ueberladen ... Problem ... Dringend
X-Newsreader: CrossPoint v3.1 R/B17071