On Wed, May 21, 2008 at 07:14:27PM +0200, Stefan Schulze Frielinghaus wrote:
> Hello all,
> 
> I just tried to easily show how many temporary objects get created in my
> program. I created a test application like this one:

> #include <iostream>
> 
> struct A {
>       static int c, d;
>       A() { ++c; }
>       ~A() { ++d; }
>       void operator+=(const A&) { }
>       A operator+(const A&) { return *this; }
> };

You forgot to add

A::A(const A&) { ++c;}

The missing call is to the copy constructor.  Since you didn't declare
one, the compiler inserts one, and it doesn't increment the counter.

Also, there are situations where a C++ compiler is allowed to eliminate
temporaries (even if this changes side effects that are invoked by
a copy constructor).



Reply via email to