🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Verwendung von char* in C++

#1618
From: Watson
Date: Fri, 23 Feb 1996 10:46
83 lines
3394 bytes
Dietmar Kuehl wrote:
> Bei einem einfachen Member, wie 'char*' macht es vermutlich, ob des
> Optimierers, keinen echten Unterschied, aber bei komplizierteren Membern
> sollte man auf jeden Fall eine 'mem-initializer-list' verwenden, also
> den Konstruktor folgendermassen schreiben:
> 
>       charPointer(char *aValue):
>         value(aValue)
>       {
>       }
Das ist mal ein konstruktiver Vorschlag :-)

[Lehrreiches weggeschnippelt]

> ... 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()).
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();

zur Herstellung von Dr. Mabuse-Objekten :-)
IMHO wird C++ gerade so erweitert, dass irgendwann
jede beliebige Zeichenfolge irgendeine Semantik
hat, das ist nicht sehr schoen.


>   template <class T>
>   class UnmanagedPointer
>   {
>   private:
>     T *i_res;
>   public:
>     explicit UnmanagedPointer(T *res = 0): i_res(res) {}
>     // The generated copy ctor, assignment, and dtor are suitable
> 
>     T    *operator-> () const      { return i_res; }
>     T    &operator[] (int i) const { return i_res[i]; }
>     T    &operator* () const       { return *i_res; }
>     T    *get() const              { return i_res; }
>     T    *release()                { T *rc = i_res; i_res = 0; return rc; }
>     void reset(T* res = 0)         { i_res = res; }
>   };

Das wollte ich eigentlich ausdruecken ;-)
-- 
*	Greetinx from Watson (sayegh@fokus.gmd.de)
	http://www.fokus.gmd.de/ovma/employees/sayegh/entry.html
	signal(SIGSEGV,SIG_IGN);
Technical Details
Message-ID: <312D9B08.1F4F@fokus.gmd.de>
Path: arc1-ca.pugleaf.net!stern.fokus.gmd.de!news
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>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!stern.fokus.gmd.de!news
From: Watson <sayegh@fokus.gmd.de>
Newsgroups: de.comp.lang.c++
Subject: Re: Verwendung von char* in C++
Date: Fri, 23 Feb 1996 11:46:32 +0100
Organization: GMD FOKUS - Research Institute for Open Communication Systems
Message-ID: <312D9B08.1F4F@fokus.gmd.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>
NNTP-Posting-Host: pollux.fokus.gmd.de
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: 7bit
X-Mailer: Mozilla 2.0 (X11; I; SunOS 5.4 sun4m)