Article View: de.comp.lang.c++
Article #1661Re: Q: operatoren ueberladen -> wer loescht evtl. neue Instanzen????
From: Karsten Baensch
Date: Thu, 15 Feb 1996 13:42
Date: Thu, 15 Feb 1996 13:42
63 lines
2938 bytes
2938 bytes
andi@linux8.phonetik.uni-muenchen.de (Andreas Zierdt) writes:
>Dirk Brenckmann (brenck@iib.bauwesen.th-darmstadt.de) wrote:
>: Im Ernst. Speziell beim Ueberladen von + und - operatoren in Klassen
>: ergibt sich das Problem, dass ich innerhalb der Methoden neue Instanzen
>: schaffen muss, um die per return wieder zuruck zu geben.
>Das folgende Beispiel sollte zeigen, wie es geht:
>/* Der Operator = ermöglicht Zuweisungen von Vektoren.*/
>template<class T> Vector<T>& Vector<T>::operator=(const Vector& v)
>{
> unsigned int i;
>
> if (this == &v)
> return( *this);
> for (i=0; i<dim; i++)
> data[i] = v.data[i];
> return (*this);
>}
>/* Die Operatoren + und - erlauben Vektoraddition und -subtraktion. */
>template<class T> Vector<T> Vector<T>::operator+(const Vector& v) const
>{
> unsigned int i;
> Vector result(dim);
>
> for (i=0; i<dim; i++)
> result.data[i] = data[i] + v.data[i];
>
> return(result);
>}
>Berechnet man jetzt a = b + c, so umfaßt die Lebensdauer des neuen, von
>+() erzeugten Objekts, die Zeit, während der der operator=() aktiv ist.
Wenn er zusaetzlich noch einen korrekten Copykonstruktor fuer Vector<T>
definiert, dann funktionierts. Denn das innerhalb von
'template<class T> Vector<T> Vector<T>::operator+(const Vector& v) const'
mit Vector 'result(dim);' erzeugte automatische Objekt ist zur Zeit der
Ausfuehrung von 'operator=()' nicht mehr am Leben! Wenn obige Aussage so
gemeint war, dann ist sie meiner Meinung nach falsch. Korrigiert mich,
wenn ich mich irre.
Wenn es so waere, dann koennte 'operator+' auch eine Referenz auf 'result'
zurueckliefern, um diese dann an 'operator=(const Vector& v)' zu
uebergeben. Das wuerde vieles einfacher machen. Geht aber nicht.
Erst durch 'return(result);' wird im Kontext der
aufrufenden Funktion ein temoraeres Objekt erzeugt und mit 'result'
initialisiert. Fuer eben diese Initialisierung braucht man den
Copykonstruktor.
Karsten
--
( Email: Karsten.Baensch@hrz.tu-chemnitz.de (
) WWW: http://www.tu-chemnitz.de/~kba/baensch.html )
( Phone: (+49-) 0371/531-1252 (
) Mail: Technical University, Computing Services, 09107 Chemnitz, Germany )
Technical Details
Message-ID:
<4fve0v$fe8@pyrrhus-f.hrz.tu-chemnitz.de>Path:
arc1-ca.pugleaf.net!news.tu-chemnitz.de!newsReferences:
<4fspll$j05@rs18.hrz.th-darmstadt.de> <4ft4ri$ne@sparcserver.lrz-muenchen.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.tu-chemnitz.de!news From: kba@hrz.tu-chemnitz.de (Karsten Baensch) Newsgroups: de.comp.lang.c++ Subject: Re: Q: operatoren ueberladen -> wer loescht evtl. neue Instanzen???? Date: 15 Feb 96 13:42:42 GMT Organization: University of Technology Chemnitz, FRG Message-ID: <4fve0v$fe8@pyrrhus-f.hrz.tu-chemnitz.de> References: <4fspll$j05@rs18.hrz.th-darmstadt.de> <4ft4ri$ne@sparcserver.lrz-muenchen.de> NNTP-Posting-Host: shark.hrz.tu-chemnitz.de