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
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
- 上一篇 C++ impl of rtti
- 下一篇 C++ typelist