mnl@idtsun1.e-technik.th-darmstadt.de (Michael@mitvma.mit.edu N. Lipp) (12/10/90)
Hello, I have a problem with functions returning their result by reference. To illustrate my problem, I tried to reduce it to this short (but not very useful) example: ------------------------------------------------------ #include <stream.h> class C1 { int i; public: C1(int ii) {i = ii; cerr << "C1 created\n";} ~C1() {cerr << "C1 deleted\n";} friend val (C1& i) { return i.i; } }; C1 f(int i) { return C1(i); } main() { cout << val (f (5)) << '\n'; } ------------------------------------------------------ When run, the program prints: C1 created C1 deleted 5 No problem. Then I changed the declaration of `f' to: "C1& f(int i)". I wanted to avoid the copying of the function result when the function is used as a parameter (as in the example). I'm not sure wether this thought is correct, the only use of a reference as function result I found in my books is in conjunction with an "operator =" declaration. There, I imagine, the left hand side `argument' of the assignment is passed by reference as a parameter. There is no left hand side in my use of the function, so what I expected was the creation of C1, its use "by reference", i.e. without any copying and its destruction. However, the modified code results in C1 created 5 There is no destructor-call. I'm using g++ 1.37.1 on a Sparc running SunOS 4.1 and I have no other compiler for verification. Is this a bug or a feature? Did I get it all wrong? [I understand that info-g++ is forwarded to comp.lang.c++. Please reply to me by mail, as we have no news at our site. By the way, does anybody know a host that forwards comp.lang.c++ to a mailing list (like there is one for unix.info)?] Thanks Michael -----------------,------------------------------,------------------------------ Michael N. Lipp ! Institut fuer Datentechnik ! Phone: 49-6151-163776 ! Merckstr. 25 ,----------' Fax: 49-6151-164976 ! D-6100 Darmstadt ! E-Mail: xdatmnlx@ddathd21.bitnet ! (Germany) ! mnl@idtsun1.e-technik.th-darmstadt.de -----------------'-------------------'-----------------------------------------