Connecting Tech Pros Worldwide Help | Site Map

Copy Constructor -Query

Vivek Shah
Guest
 
Posts: n/a
#1: Jul 22 '05
Hi,
Given below is apiece of code which I was writing to clear my concepts
of copy constructor. I have a function f() which takes Class A object
through call by value and return the same object. Copy constructor is
called when we pass the argument by value and we return from the
function and also we initialize.

In the main function, I check the number of time the copy constructor
is called, I expect it to be 3
(1) parameter passing in f(a)
(2)return in f(a)
(3) initialization of c = f(a)

But it seems the copy constructor is called twice ..Why is that ?

static int num;
A::A(const A& A1)
{
cout<<" Inside COPY Constructor " <<++num <<endl;
}


const A f(const A z)
{
cout << "Inside Function" <<endl;
return(z);
}


int main()
{
A a(5);
A c = f(a); // c is initialized by return value of function f()
cout << num; // Shouldnt num be 3 ...it is giving 2
}

Regards
-Vivek Shah
Victor Bazarov
Guest
 
Posts: n/a
#2: Jul 22 '05

re: Copy Constructor -Query


"Vivek Shah" <shahv@ececs.uc.edu> wrote...[color=blue]
> Hi,
> Given below is apiece of code which I was writing to clear my concepts
> of copy constructor. I have a function f() which takes Class A object
> through call by value and return the same object. Copy constructor is
> called when we pass the argument by value and we return from the
> function and also we initialize.
>
> In the main function, I check the number of time the copy constructor
> is called, I expect it to be 3
> (1) parameter passing in f(a)
> (2)return in f(a)
> (3) initialization of c = f(a)
>
> But it seems the copy constructor is called twice ..Why is that ?[/color]

Read about "return value optimisation" or "RVO". The compiler is
allowed to optimise the creation of a temporary away and return the
object directly in your 'c'.

Victor


Closed Thread