🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Typ Konversion

#291
From: Enno Sandner
Date: Tue, 22 Aug 1995 12:31
36 lines
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!enno
References: <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