*@Class</A>计134~4
*@Author:薛富磊
*@Time:2014-4-8
*@Function:深复制
*@Args:
*@Return:
*/
#include<iostream>
#include<cstring>
using namespace std;
class A
{
private:
char *a;
public:
A(char *aa)
{
a = new char[strlen(aa)+1]; //(1)这样处理的意义在于:_重新分配空间_____________________________
strcpy(a,aa); //(2)数据成员a与形式参数aa的关系:____深复制_______________________________
}
~A()
{
delete []a; //(3)这样处理的意义在于: _____删除内存_____________________________________
}
void output()
{
cout<<a<<endl;
}
};
int main(){
A a("good morning, code monkeys!");
a.output();
A b("good afternoon, codes!");
b.output();
return 0;
}
将注释(1)所在的那一行去掉,会出现什么现象?为什么?为什么a数据成员所占用的存储空间要在aa长度基础上加1?
重新分配内存空间,进行深复制,不然执行后,接着析构函数进行删除内存,将出现变化
/*Univercity:烟台大学
*@Class</A>计134~4
*@Author:薛富磊
*@Time:2014-4-8
*@Function:深复制
*@Args:
*@Return:
*/
#include<iostream>
#include<cstring>
using namespace std;
class A
{
private:
char *a;
public:
A(char *aa)
{
a = new char[strlen(aa)+1]; //(1)这样处理的意义在于:_重新分配空间_____________________________
strcpy(a,aa); //(2)数据成员a与形式参数aa的关系:____深复制_______________________________
}
~A()
{
delete []a; //(3)这样处理的意义在于: _____删除内存_____________________________________
}
void output()
{
cout<<a<<endl;
}
};
int main(){
A a("good morning, code monkeys!");
a.output();
A b(a);
b.output();
return 0;
}