问题及代码:
#include<iostream>
#include<cstring>
using namespace std;
class A
{
private:
char *a;
public:
A(char *aa)
{
a=new char [strlen(aa)+1];//(a0这样的处理意义在于(不浪费内存空间,节省许多系统单元)
strcpy(a,aa);//数据成员a与形式参数aa的关系(同为指针数组,且内存空间相同)
}
~A()
{
delete[]a;//这样处理的意义在于使内存空间得到释放, 否则会导致动态分配的内存无法回收,使得程序占据的内存越来越大,这叫做内存泄漏
}
void output()
{
cout<<a<<endl;
}
A (A &p);
};
A::A(A &p)
{
a=new char [strlen(b.a)+1];
strcpy(a.b.a);
int main()
{
A a("good morning,code monkeys!");
a.output();
A b(a);
b.output();
return 0;
}
运行结果:
学习心得:
深复制是为指针数据分配单独的空间