jamshid@walt.cc.utexas.edu (Jamshid Afshar) (08/15/90)
Hi. I believe I have found a bug in TC++ 1.0. It only appears to
happen when OUT-OF-LINE inline functions is set to on (to aid
debugging). It seems that when an if() expression is
short-circuited, the destructors are called for any temporary
variables that would have been created had the expression not been
short-circuited. The constructor for those temporaries are correctly
never called, so what you have is an often disastrous destructor call
on a garbage object. Anybody else have other problems with
temporaries? Please post any bug reports for TC++ to
comp.os.msdos.programmer. I just wasted a day and a 1/2 hour
long-distance on this problem :-(.
output with Out-of-line inline funcs:
----
Constructor
Desctructor isok()=0
Desctructor isok()=1
output without Out-of-line inline funcs:
----
Constructor
Desctructor isok()=1
---------------------------------------------------
Compiled from IDE with out-of-line inine functions.
---------------- cut here -------------------------
#include <fstream.h>
const MAGIC_VALUE = 4;
class Dummy {
private:
int x;
public:
Dummy() { x=MAGIC_VALUE; cout << "Constructor" << endl; }
Dummy duplicate() { return *this; }
int isok() { return x==MAGIC_VALUE; }
~Dummy() { cout << "Desctructor isok()=" << isok() << endl; }
};
int main()
{
cout << "----" << endl;
Dummy dummy;
if (0 && dummy.duplicate().isok())
cout << "Something's very wrong." << endl;
return 0;
}
---------------- stop here -------------------------
--Jamshid Afshar
--jamshid@ccwf.cc.utexas.edu