可能重复:
没有调用复制构造函数
在此代码中,从不调用复制构造函数(也不调用移动构造函数或赋值运算符)。怎么可能?有人可以解释函数如何返回值,堆栈和寄存器会发生什么(或发布一些好的链接)吗?
#include <iostream>
#include <cstring>
using namespace std;
class Test;
Test getnew(int arg);
class Test
{
public:
char *conts;
int len;
Test(char* input = NULL){conts = new char[len=10];
if(input)strncpy(conts,input,9);else strcpy(conts,"xxxxx");
cout << "\nconstructor: " << conts;
};
Test(const Test& t){
conts = new char[10];
if(t.len)strncpy(conts,t.conts,9);
len = t.len;
cout << "\ncopy-constructor: " << conts;
};
Test(Test&& t){
conts = t.conts;
t.conts = NULL;
std::swap(len,t.len);
cout << "\nmove-constructor: " << conts;
};
~Test(){
cout << "\ndestructor";
if(conts)delete [] conts;
len = 0;
conts = NULL;
};
Test& operator=(Test rhs)
{
std::swap(conts,rhs.conts);
std::swap(len,rhs.len);
cout << "\nassigend: " << conts;
}
};
int main()
{
Test t2 = getnew(1);
cout << endl << t2.conts;
return 0;
}
Test getnew(int arg)
{
Test retj("FFFFF");
return retj;
}
只调用了一个构造函数和一个析构函数。但是对象 t2 具有使用正确值“FFFF”初始化的值成员 conts。我知道应用了返回值优化,但是对象 t2 是如何初始化的?