C++: RVO( return value optimization)

來源:互聯網
上載者:User
#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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.