C++重载加号运算符返回时遇到的有关问题

C++重载加号运算符返回时遇到的问题
代码如下:
BigNumber BigNumber::operator+( BigNumber& r )
{
Invert(r.data);//倒置
Invert(data);

int len = (int)strlen(data);
int r_len = (int)strlen(r.data);

char* temp = new char[len * r_len];

int b = 0;
for(int i = 0; i < max(len, r_len); i++){
int t = (isOk(*(this->data + i)) - '0') + (isOk(*(r.data + i)) - '0') + b;
if(t >= 10) b = 1;
else b = 0;
*(temp + i) = t % 10 + '0';
}

if(b){
*(temp + max(len, r_len)) = '1';
*(temp + max(len, r_len) + 1) = 0;
}else *(temp + max(len, r_len)) = 0;

Invert(r.data);
Invert(data);
Invert(temp);

BigNumber end(temp);
delete[len * r_len]temp;

return end;//此句要进拷贝构造函数,再进析构函数
}

返回给调用处的data是0XCCCCCCCC。

我就不明白了,在return那里明明拷贝了一个,为什么还是不行呢?

------解决方案--------------------
BigNumber::BigNumber( BigNumber& bigNum )
{
data= new char[strlen(bigNum.data)+1];
strncpy(data,bigNum.data,strlen(bigNum.data));
 }

大概意思是这样了。
------解决方案--------------------
BigNumber::BigNumber( BigNumber& bigNum )
{
BigNumber(bigNum.data);
}

你以为红色部分是调用了BigNumber::BigNumber( char* array_num )这个函数,设置data,但实际上是产生了个BigNumber临时对象。