#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class CA
{
public:
CA();
~CA();
CA(const CA&);
void Init(int a,char* chvar)
{
x = a;
memcpy(ch,chvar,10*sizeof(char));
}
void show()
{
cout<<x<<" "<<ch;
}
void Del()
{
delete ch;
}
protected:
private:
int x;
char* ch;
};
CA::CA()
{
ch = new char[10];
// cout<<"这里是构造函数 "<<x<<" "<<ch<<endl;
}
CA::~CA()
{
/*cout<<"这里是析构函数"<<endl;*/
}
//拷贝构造函数
CA::CA(const CA& cb)
{
x = cb.x;
ch = new char[10];//独立分配内存
memcpy(ch,cb.ch,10*sizeof(char));//传值
}
int _tmain(int argc, _TCHAR* argv[])
{
CA a;
a.Init(1,"1211hjh3");
//b = a;
CA b(a);
//如果写成ca a,b; a.Init(1,"1211hjh3"); b(a);就错了,因为这时候b在开始的时候已经构造了
b.show();
a.Del();//把a内的数据ch释放掉以后,因为b的拷贝构造函数使b内的ch是独立的,跟a无关,所以b里的ch内存不会被删除。
//如果没有拷贝构造函数的话,因为类的成员里面有指针,默认拷贝以后,指针指向 的是一个地址,所以,删除了第一个的内容,第二个对象的指针值也没删除了
cout<<endl;
b.show();
getchar();
return 0;
}