#include<iostream>
#include<stdlib.h>
#include<cstring>
#include<cstdlib>
using namespace std;
class Student
{
public:
Student(char *,int);
~Student()
{
cout<<"我是析构函数"<<endl;
delete name;
}
void show();
private:
char *name;
int age;
};
Student::Student(char *p,int a)
{
int length=strlen(p)+1;
name=new char[length];
if(name==0)
{
cout<<"申请内存失败"<<endl;
exit(1);
}
strcpy(name,p);
age=a;
}
void Student::show()
{
cout<<"my name is"<<name<<endl;
cout<<"i'm "<<age<<"years old this year"<<endl;
}
int main()
{
Student stu1("邓文正",19);
Student stu2=stu1;
stu1.show();
stu2.show();
return 0;
}
不同编译器处理的方式会不同,楼主用的是codeblocks
这里是没有定义拷贝构造函数的情况,会调用默认拷贝构造函数,只是拷贝指针值,所以两个指针同时指向new分配的单元,所以析构时同一单元会析构两次。对于这种情况,不同的编译器处理方式不同,有的编译器会报错,有的会忽略