Connecting Tech Pros Worldwide Help | Site Map

Copy Constructor -Query

 
LinkBack Thread Tools Search this Thread
  #1  
Old July 22nd, 2005, 10:20 AM
Vivek Shah
Guest
 
Posts: n/a
Default Copy Constructor -Query

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

  #2  
Old July 22nd, 2005, 10:20 AM
Victor Bazarov
Guest
 
Posts: n/a
Default 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


 

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Popular Articles

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over 220,840 network members.