C++ rvo( return value optimization)

#include <stdio.h>

class RVO

{

public:

    RVO()

    {

    printf("I am in constructor %d\n", this);

    }

    RVO (const RVO& c_RVO)

    {

    printf ("I am in copy constructor %d\n", this);

    }

    ~RVO()

    {

    printf ("I am in destructor %d\n", this);

    }

    RVO& operator=(const RVO& rhs)

    {

    printf ("I am in operator %d = %d\n", this, &rhs);

    return *this;

    }

    int mem_var;

};

RVO MyMethod (int i)

{

    printf("3\n");

    RVO rvo; //I am in constructor 1244896

    printf("4\n");

    rvo.mem_var = i;

    printf("5\n");

    return (rvo); //1244948CC, ~1244896

    printf("6\n");

}

int main()

{

    printf("1\n");

    RVO rvo; //I am in constructor 1245016

    printf("2\n");

    rvo=MyMethod(5); //I am in copy constructor

    printf("7\n");

    return 0; //~1245016

}


RVO MyMethod (RVO& hddenObj, int i)

{

    printf("3\n");

    RVO rvo;
    rvo.RVO();    //I am in constructor 1244896

    printf("4\n");

    rvo.mem_var = i;

    printf("5\n");

    hddenObj.RVO(rvo);    //I am in copy constructor
    rvo.~RVO();    
    
    return ; //1244948CC, ~1244896
    
    printf("6\n");

}

int main()

{

    printf("1\n");

    RVO rvo; //I am in constructor 1245016

    printf("2\n");

    rvo=MyMethod(5); //I am in copy constructor

    printf("7\n");

    return 0; //~1245016

}

1
I am in constructor 1245016
2
3
I am in constructor 1244888
4
5
I am in copy constructor 1244944
I am in destructor 1244888
I am in operator 1245016 = 1244944
I am in destructor 1244944
7
I am in destructor 1245016

Powered by Jekyll and Theme by solid

本站总访问量