Article View: de.comp.lang.c++
Article #1805Re: Rueckgabe v. Referenz auf lokale Variable [[was: Re: Ein paar Frag
From: Claus A. Faerber
Date: Sun, 10 Mar 1996 00:00
Date: Sun, 10 Mar 1996 00:00
65 lines
2090 bytes
2090 bytes
Ruediger Berlich <berlichr@afal23.cern.ch> (10.03.96):
> Hallo,
> - Wenn ich etwa die folgenden (Member-)Funktionen/Klassen
> deklariere/definiere : (schwachsinnig, ich weiss, soll nur ein Beispiel
> sein)
>
> ===============================================
>
> class matrix
> {
> public:
> matrix(long, long);
> matrix(const matrix&);
> ...
> matrix& giveBackMatrix(void);
> matrix& operator=(const matrix&);
> matrix& operator=(double); // Soll Matrix mit dem Argument initialisieren
> private:
> ...
> };
>
> matrix& matrix::giveBackMatrix(void)
> {
> matrix z(*this);
> return z;
> }
>
> main()
> {
> matrix x(3,3),y(3,3);
> x=1.;
> y=0.;
> ...
> y=x.giveBackMatrix();
> }
>
> =============================================
>
> w"are dann sichergestellt, dass 'z' als lokale Variable lange genug
> lebt, um operator= auszuf"uhren ?
Nein, die lokale Variable muss geloescht werden, bevor die
Funktion zurueckkehrt; operator= wird erst nach der
Rueckkehr aufgerufen.
> W"urden dann in y also lauter
> '1.' stehen ? Oder w"are das Ganze undefiniert ?
Ja.
> Anders ausgedr"uckt, wie kann ich bei der R"uckgabe einer Referenz
> vermeiden, den R"uckgabewert (z) mit 'new' anlegen zu m"ussen
> (==> explizites L"oschen notwendig) ?
Lass' doch einfach das '&' beim Rueckgabewert weg, dann wird
das ganze nicht als Referenz sondern als Kopie (mit new
angelegt) uebergaben; aber der Compiler kuemmert sich
implizit um das Loeschen.
Claus
------------------------------------------------------------------------
Claus Andre Faerber - claus@faerber.muc.de - http://www.muc.de/~cfaerber
------------------------------------------------------------------------
Technical Details
Message-ID:
<64azsOLocDB@faerber.muc.de>Path:
arc1-ca.pugleaf.net!faerber.muc.de!clausReferences:
<Do2325.Fwu@news.cern.ch>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!faerber.muc.de!claus Date: 10 Mar 1996 00:00:00 +0000 From: claus@faerber.muc.de (Claus A. Faerber) Newsgroups: de.comp.lang.c++ Message-ID: <64azsOLocDB@faerber.muc.de> References: <Do2325.Fwu@news.cern.ch> Subject: Re: Rueckgabe v. Referenz auf lokale Variable [[was: Re: Ein paar Frag X-Newsreader: CrossPoint v3.1 R/B17071