Article View: de.comp.lang.c++
Article #291Re: Typ Konversion
From: Enno Sandner
Date: Tue, 22 Aug 1995 12:31
Date: Tue, 22 Aug 1995 12:31
36 lines
2376 bytes
2376 bytes
Christoph Liebig <chris>: >Bekanntlich kann man in C++ eigene Typkonversionsoperatoren definieren. >Beispielsweise um ein Objekt der Klasse A nach B zu casten, koennte in A der >operator B()' definiert werden, der ein B-Objekt zurueckliefern muss. >Was bedeutet das fuer das target-Objekt der Klasse A, wenn es nach B gecastet >wird ? Wird das Objekt A zerstoert -- ich denke nein, und nehme an, dass bei >casts sogenannte temporary objects erzeugt werden. Was die Lebensdauer der A- und der zurueckgelieferten B-Instanz betrifft, verhaelt es sich genauso wie bei Memberfunctions. Wird eine Instanz der Klasse B zurueckgeliefert, wird der B-Copy-Constructor aufgerufen, ein temporaeres Objekt erzeugt und an geeigneter Stelle wieder zerstoert. Bei einer Initialisierung der Form 'B b=(B)a;' bleibt das temp. Objekt z.B. solange bestehen, bis die Initialisierung von 'b' abgeschlossen ist. Einen Einfluss auf die Lebensdauer der A-Instanz hat dies (i.allg.) nicht. >Wenn dem so ist, muesste in operator B() eine neues B Objekt konstruiert >werden und ueberdies koennte der operator B() gegebenenfalls als const >deklariert werden. Ja >Gibt es dazu naehere Vorschriften oder Konventionen (beispieslweise koennten >cast operatoren guenstigerweise nur eine Referenz zurueckliefern) ? Das haengt stark von der Art der Typumwandlung ab. Falls die B Instanz z.B. als Member-Variable in der Klasse A enthalten ist, bietet es sich sicherlich an eine *konstante* Referenz darauf zurueckzuliefern. Der Nachteil von Konversionsoperatoren ist, dass man ein Stueck 'Kontrolle' ueber sein Programm verliert, was zu wirklich ueblen (=schwer auffindbaren) Fehlern fuehren kann. Haeufig ist deshalb eine normale Memberfunction vorzuziehen, auch wenn auf den ersten Blick der Konversionsoperator schicker aussieht. Gruss Enno
Technical Details
Message-ID:
<ENNO.95Aug22143159@kitz.inferenzsysteme.informatik.th-darmstadt.de>Path:
arc1-ca.pugleaf.net!news.th-darmstadt.de!news!ennoReferences:
<41ce20$q0v@rs18.hrz.th-darmstadt.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.th-darmstadt.de!news!enno From: enno@inferenzsysteme.informatik.th-darmstadt.de (Enno Sandner) Newsgroups: de.comp.lang.c++ Subject: Re: Typ Konversion Date: 22 Aug 1995 12:31:59 GMT Organization: Fachbereich Informatik, TH Darmstadt Message-ID: <ENNO.95Aug22143159@kitz.inferenzsysteme.informatik.th-darmstadt.de> References: <41ce20$q0v@rs18.hrz.th-darmstadt.de> NNTP-Posting-Host: kitz.intellektik.informatik.th-darmstadt.de In-reply-to: Christoph Liebig's message of 22 Aug 1995 11:12:00 GMT