为什么当g_Fun()
执行return temp
时它会调用复制构造函数?
class CExample
{
private:
int a;
public:
CExample(int b)
{
a = b;
}
CExample(const CExample& C)
{
a = C.a;
cout<<"copy"<<endl;
}
void Show ()
{
cout<<a<<endl;
}
};
CExample g_Fun()
{
CExample temp(0);
return temp;
}
int main()
{
g_Fun();
return 0;
}
答案 0 :(得分:7)
因为您按值返回,但请注意,由于RVO,不需要调用复制构造函数。
根据优化级别,可能会或可能不会调用复制程序 - 不要依赖复制程序。
答案 1 :(得分:0)
每当我们返回一个对象(而不是它的引用)时,都可以调用一个复制构造函数,因为需要创建一个由默认复制构造函数完成的副本。
CExample g_Fun()
{
return CExample(0); //to avoid the copy constructor call
}