Go backward to Static Definitions.
Go up to C++ Misunderstandings.

Temporaries May Vanish Before You Expect
----------------------------------------

   It is dangerous to use pointers or references to *portions* of a
temporary object.  The compiler may very well delete the object before
you expect it to, leaving a pointer to garbage.  The most common place
where this problem crops up is in classes like the libg++ `String'
class, that define a conversion function to type `char *' or `const
char *'.  However, any class that returns a pointer to some internal
structure is potentially subject to this problem.

   For example, a program may use a function `strfunc' that returns
`String' objects, and another function `charfunc' that operates on
pointers to `char':

     String strfunc ();
     void charfunc (const char *);

In this situation, it may seem natural to write
`charfunc (strfunc ());' based on the knowledge that class `String' has
an explicit conversion to `char' pointers.  However, what really
happens is akin to `charfunc (strfunc ().convert ());', where the
`convert' method is a function to do the same data conversion normally
performed by a cast.  Since the last use of the temporary `String'
object is the call to the conversion function, the compiler may delete
that object before actually calling `charfunc'.  The compiler has no
way of knowing that deleting the `String' object will invalidate the
pointer.  The pointer then points to garbage, so that by the time
`charfunc' is called, it gets an invalid argument.

   Code like this may run successfully under some other compilers,
especially those that delete temporaries relatively late.  However, the
GNU C++ behavior is also standard-conforming, so if your program depends
on late destruction of temporaries it is not portable.

   If you think this is surprising, you should be aware that the ANSI
C++ committee continues to debate the lifetime-of-temporaries problem.

   For now, at least, the safe way to write such code is to give the
temporary a name, which forces it to remain until the end of the scope
of the name.  For example:

     String& tmp = strfunc ();
     charfunc (tmp);