0

Hi,

Please tell me in the following question why no copy constructor is called when fun returns the A object.
While returning b and constructing c, there is no copy constructor called. Why??

#include<iostream>

using namespace std;

class A
{
    public:
    A(){cout <<"Default\n";}
    A(const A&){
                cout<<"copy\n";
    }
    A fun(A a)
        {
             A b; 
            return b;
        }
};

int main()
{
    A a;
    A c = a.fun(a); // Here atleast copy copy constructor should have been called.
    return 0;
}
3
Contributors
2
Replies
18
Views
4 Years
Discussion Span
Last Post by mike_2000_17
0

This is a case of return-value-optimization (or RVO). This is one of the few cases (with copy elision) where the compiler is allowed to change the behavior of the code (by eliminating calls to copy constructors and destructors) for optimization purposes. In other words, never depend on a specific number of copies being created as part of the critical behavior of your program.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.