Re: confusion between copy and templated constructors
Richard Thompson wrote:
On Fri, 22 Jun 2007 12:49:34 +0100, Richard Thompson <rj413@yaho.com>
wrote:
The new code is:
const MyClass foo(a, b, c);
...
const myClass bar = foo(x, y, z); // *not* using copy ctor!!
Sorry - being dumb. In more detail, this should have been:
const myClass foo(const MyClass& a, const MyClass &b, etc);
You're doing it again! 'myClass' as the return value type: is it the
same as the type of the references passed in or is it different?
...
void wibble(const MyClass* a, const MyClass* b) {
const MyClass bar = foo(a, b, etc);
...
}
So, I was passing ptrs to 'foo', rather than refs. I'm not quite sure
what happens next; I don't think a copy ctor is required when passing
the args to 'foo', since reference args are specified. However, at
some point the MyClass ptrs seem to go through ctor 2 to turn them
into MyClass objects, and this seems to be where the failure was.
Changing the 'foo' call to "foo(*a, *b, etc)" fixes the problem.
Since 'foo' expects a reference to const 'MyClass', the compiler creates
a temporary object of type 'MyClass' and binds the reference to it. The
temporary object is created using the (you guessed it!) templated c-tor
with (T == MyClass const*).
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask