以下函数ReturnObjectDirect与ReturnObject分别调用了多少次构造函数?
#include <iostream>
using namespace std;
class Base
{
public:
Base( )
{
cout<<"缺省构造函数"<<endl;
}
Base(const Base & other)
{
cout<<"复制构造函数"<<endl;
}
~Base()
{
cout<<"析造函数"<<endl;
}
};
Base ReturnObjectDirect( )
{
return Base();
}
Base ReturnObject()
{
Base ret;
return ret;
}
int main()
{
Base obj1 =ReturnObjectDirect();
Base obj2 =ReturnObject();
return 0;
}
ReturnObjectDirect函数由于编译器优化所以只调用了一次缺省构造函数!
而ReturnObject函数
Base ret; //这里调用了一次缺省构造函数
return ret; //调用拷贝构造函数将ret赋给临时变量
所以总共调用了二次构造函数!
#include <iostream>
using namespace std;
class Base
{
public:
Base( )
{
cout<<"缺省构造函数"<<endl;
}
Base(const Base & other)
{
cout<<"复制构造函数"<<endl;
}
~Base()
{
cout<<"析造函数"<<endl;
}
};
Base ReturnObjectDirect( )
{
return Base();
}
Base ReturnObject()
{
Base ret;
return ret;
}
int main()
{
Base obj1 =ReturnObjectDirect();
Base obj2 =ReturnObject();
return 0;
}
ReturnObjectDirect函数由于编译器优化所以只调用了一次缺省构造函数!
而ReturnObject函数
Base ret; //这里调用了一次缺省构造函数
return ret; //调用拷贝构造函数将ret赋给临时变量
所以总共调用了二次构造函数!