为什么重载的+运算符函数中的临时对象不能被析构?

来源:互联网 发布:在国外怎么用淘宝 编辑:程序博客网 时间:2024/06/11 17:00

如题……

//String 类声明及定义  String.h

#include<iostream>
using std::cout;
using std::endl;

class String 
{
public:
 String();
 String(const String &t);
 String(const char *ch);
    String &  operator=(const String &t);
 String  operator+(const String &t);
 void display();
 virtual ~String();
private:
 char *data;
 int SIZE;
};


String::String()
{
 data=0;
 SIZE=0;
 cout<<"无参数构造函数调用..."<<endl;
}

String::~String()
{
 cout<<SIZE<<" 析构函数调用中。。。"<<endl;
 delete []data;
}

String::String(const String &t)
{
 SIZE=t.SIZE;
 data=new char[SIZE+1];
 for(int i=0;i<SIZE;i++)
  data[i]=t.data[i];
 data[i]='/0';
 cout<<SIZE<<" 复制构造函数调用中。。。"<<endl;

}

String::String(const char *ch)
{
 for(int i=0;ch[i]!='/0';i++);//求字符串的个数。
   
 SIZE=i;

 data=new char[SIZE+1];

 for(i=0;i<SIZE;i++)
  data[i]=ch[i];
 data[i]='/0';

 cout<<SIZE<<" 带指向字符串指针作参数的构造函数。。。"<<endl;

}

String & String::operator =(const String &t)
{
 delete []data;
 SIZE=t.SIZE;
 data=new char[SIZE+1];
 for(int i=0;i<SIZE;i++)
  data[i]=t.data[i];
 data[i]='/0';
 cout<<SIZE<<" 赋值运算符执行中..."<<endl;
 return *this; 
}


String  String::operator +(const String &t)
{
 String temp;
 temp.SIZE=SIZE+t.SIZE;
 temp.data=new char[SIZE+1];
 for(int i=0;i<temp.SIZE;i++)
  if(i<SIZE)
   temp.data[i]=data[i];
  else
   temp.data[i]=t.data[i-SIZE];
 temp.data[i]='/0';
 return temp;//为什么temp的无法析构?

}


void String::display()
{
 for(int i=0;i<SIZE;i++)
  cout<<data[i];
 cout<<endl;
}

//主函数main.cpp

#include"String.h"

int main()
{
 String str0 = "man"; 
 str0.display();

 String str1="Welcome";
 str1.display();

 str0=str1+"China";
 str0.display();

 return 0;
}

原创粉丝点击