constructor. 构造A
hello 输出A
copy constructor. 构造input函数的那个形参temp
Please input the string:abcd
copy constructor. 构造B
destructor. 析构temp
hello 输出A
abcd 输出B
destructor. 析构B
destructor. 析构A
过程很清晰,楼主怎么说临时对象temp没有析构呢。我修改一点你的程序,更容易理解
程序代码:
#include<iostream>
using namespace std;
class CStrtemp
{
public:
CStrtemp():str(NULL){
}//无参数构造函数
CStrtemp(char *s);
CStrtemp(const CStrtemp&);
~CStrtemp();
void show();
void set(char *s);
CStrtemp Input();
private:
char *str;
};
CStrtemp::CStrtemp(char *s)
{
cout<<"constructor."<<endl;
str=new char[strlen(s)+1];
if(!str)
{
cout<<"Allocation Error."<<endl;
exit(1);
}
strcpy(str,s);
}
CStrtemp::CStrtemp(const CStrtemp &temp)
{
cout<<"copy constructor."<<endl;
str=new char[strlen(temp.str)+1];
if(!str)
{
cout<<"Allocation Error."<<endl;
exit(1);
}
strcpy(str,temp.str);
}
CStrtemp::~CStrtemp()
{
cout<<"destructor."<<endl;
if(str!=NULL)
{
delete[] str;
}
}
void CStrtemp::show()
{
cout<<str<<endl;
}
void CStrtemp::set(char *s)
{
delete[] str;
str=new char[strlen(s)+1];
if(!str)
{
cout<<"Allocation Error."<<endl;
exit(1);
}
strcpy(str,s);
}
CStrtemp CStrtemp::Input()
{
char s[20];
cout<<"Please input the string:";
cin>>s;
CStrtemp temp;//创建临时对象
temp.set(s);
return temp;//调用拷贝构造函数之后调用析构函数析构temp
}
int main()
{
CStrtemp A("hello");
A.show();
CStrtemp B=A.Input();//此处对象B的创建不需要调用复制构造函数吗,形式上为对象复制的一般格式<类名><对象2>=<对象1>;,为什么没调用?
A.show();
B.show();
return 0;
}