有复制构造函数时最后析构函数的顺序问题
#include<iostream>#include<string>
using std::cout;
using std::endl;
class my
{
private:
char *pname;
int len;
static int mys;
public:
my(char *p);
my();
~my();
my(const my&);
void showp();
};
int my::mys=0;
my::my(const my & s) //复制构造函数
{
mys++;
cout<<"this is copy hanshu: ";
}
my::my(char *p) //普通构造函数
{
len=strlen(p);
pname=new char[len+1];
strcpy(pname,p);mys++;}
my::my()
{
len=4;
pname=new char[len];
strcpy(pname,"C++");
mys++;
}
void my::showp() //自定义函数
{
cout<<pname<<endl;
}
my::~my() //析构函数
{
mys--;cout<<pname<<" left"<<mys<<";\n";
}
void show(my s){s.showp();} //自定义函数
int main()
{
my my1="tets";
show(my1);
}
输出结果是(这个荅?什么的是乱码):
this is copy hanshu: 荅
荅?left1;
tets left0;
Press any key to continue
有个地方不懂了,书上说自动存储对象被删除的顺序与创建顺序相反,那么理论上输出结果应该是这样的:
this is copy hanshu: tets
tets left1;
荅?left0;
Press any key to continue
求指教,哪里弄错了,第一次发帖哈哈