🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Verwendung von char* in C++

#1620
From: Dietmar Kuehl
Date: Fri, 23 Feb 1996 11:45
84 lines
4203 bytes
Hi,

Watson (sayegh@fokus.gmd.de) wrote:
: Das ist mal ein konstruktiver Vorschlag :-)

Endlich mal was, was gefaellt :-)

: Dietmar Kuehl wrote:
: > ... und gleich noch was relativ neues aus dem Standard: Fuer den Fall,
: > dass man eine etwaige Exception bei der Konstruktion eines Members in
: > der 'mem-initializer-list' abfangen will, kann man das so schreiben:
: > 
: >       charPointer(char *aValue)
: >         try
: >         {
: >           : value(a_value)
: >           {
: >           }
: >         }
: >         catch (...)
: >         {
: >         }

: Abgesehen vom Nutzen der Exceptions muss ich Dir leider
: sagen, dass sie ein aesthetischer Fauxpas sind:

: versucheMalObDasGeht {
:   Arbeit();
: } WennNaemlichNicht {
:   kannJaGarNixGegenTun();
:   sageWasUebles();
:   terminiere();
: }

: Ich ziehe da allemal noch das klassische assert()
: vor. Ein Konstruktor darf IMHO gar nicht fehlschlagen,
: ausser im Falle aeusserer Fehler (zu wenig Speicher
: etc.). Da aber im Fall von externen Fehlerursachen
: sowieso nichts behoben werden kann, kann man auch 
: genausogut bereits im Konstruktor abbrechen (z.B.
: mit assert()).

Ich hoffe, dass ich nie in die Verlegenheit komme, in ein Flugzeug zu
steigen, dessen Autopilot von Dir oder jemandem mit einer aehnlichen
Einstellung programiert wurde:  Das Programm mag zwar toll sein und
z.B. automatisch einen Rundflug fliegen, aber wenn beim Aufruf der
Rundflugprozedur zuwenig Speicher da ist, entschliesst sich das
Programm NICHT, einfach weiterzufliegen (eben ohne Rundflug), sondern
schaltet einfach mal ab.
Ein solches Verhalten mag im wissenschaftlichen Bereich (die GMD ist ja
kein industrielles Unternehmen) angemessen sein (die Tests steigen halt
mit 'ner Fehlermeldung aus), sind aber sonst in der Regel
katastrophal:  Wenn kein Speicher da ist, muss man allzu oft dafuer
sorgen, dass es trotzdem weitergeht. Exceptions sind genau dafuer gut,
dass man anstatt einem 'assert()' eine solche wirft: Wenn sie nicht
irgendwo gefangen wird, dann ist halt 'terminate()' faellig. Aber es
gibt Situationen, und zwar ausreichend viele und ich denke sogar die
Mehrzahl, in denen man eben schlimmstenfalls darauf verzichten kann,
einen bestimmten Teil des Programms auszufuehren.
Als Beispiel kann man sich einen interaktiven fuer sonstwas (Text,
Grafik, Audio,...) vorstellen, dass eine Modification-History
mitfuehrt. Wenn ein neues Element eingefuegt wird und kein Platz mehr
da ist (d.h. der entsprechende Konstruktor wirft eine Exception), dann
kann man ja die Modification-History etwas aufraeumen oder Teile
auslagern.

: Nichtsdestotrotz ist die abenteuerliche Schreib-
: weise zum Abfangen von Exceptions aus abgeleiteten
: Konstrukturoen natuerlich ein Grund zum Schmunzeln,
: wie auch:

: this->~bla();
: this= new blubber();

... was nicht geht (in meinem "Konstruktor"-Artikel habe ich eine
Sequenz 'this->~T(); new(this) T()' verwendet):  'this' (in einer
Methode von 'T')  ist deklariert als 'this *const'. In einer 'const'
Methode ist es als 'this const *const' deklariert. Die Deklarationen
von 'this' sind natuerlich implizit. Man konnte irgendwann (CFront-1.0
oder so) zu 'this' zuweisen. Das geht schon lange nicht mehr.
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl
I am a realistic optimist - that's why I appear to be slightly pessimistic
Technical Details
Message-ID: <4gk9cp$4bf@news.BelWue.DE>
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl
References: <3120B25C.2650@fokus.gmd.de> <31229576.0@news.uni-konstanz.de> <pu91i3yvzc.fsf@themroc.colibri.de> <BOP9B96C@wuschel.ibb.schwaben.com> <4gdb6p$i5j@news.BelWue.DE> <W7Q9BM6M@wuschel.ibb.schwaben.com> <4ggkbr$7vr@news.BelWue.DE> <312C5E01.1435@fokus.gmd.de> <4gibof$1qa@news.BelWue.DE> <312D9B08.1F4F@fokus.gmd.de>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl
From: kuehl@uzwil.informatik.uni-konstanz.de (Dietmar Kuehl)
Newsgroups: de.comp.lang.c++
Subject: Re: Verwendung von char* in C++
Date: 23 Feb 1996 11:45:29 GMT
Organization: Fakultät für Mathematik und Informatik
Message-ID: <4gk9cp$4bf@news.BelWue.DE>
References: <3120B25C.2650@fokus.gmd.de> <31229576.0@news.uni-konstanz.de> <pu91i3yvzc.fsf@themroc.colibri.de> <BOP9B96C@wuschel.ibb.schwaben.com> <4gdb6p$i5j@news.BelWue.DE> <W7Q9BM6M@wuschel.ibb.schwaben.com> <4ggkbr$7vr@news.BelWue.DE> <312C5E01.1435@fokus.gmd.de> <4gibof$1qa@news.BelWue.DE> <312D9B08.1F4F@fokus.gmd.de>
Reply-To: dietmar.kuehl@uni-konstanz.de
NNTP-Posting-Host: uzwil.informatik.uni-konstanz.de
X-Newsreader: TIN [version 1.2 PL2]