永发信息网

类的char型指针申请和释放的问题

答案:2  悬赏:60  手机版
解决时间 2021-02-23 19:55
可以只看基类和主函数。。
#include

#include
#include
#include
using namespace std;
class person
{
protected:
char *name;
char *sex;
int age;
public:
person(char *a,char *b,int c):age(c)
{
name=new char[strlen(a)+1];
name=a;
sex=new char[strlen(b)+1];
strcpy(sex,b);
}
void show()
{
cout<<"name:"< }
~person()
{
delete []name;
delete []sex;
name=NULL;
sex=NULL;
}
};
class employee:public person
{
protected:
int salary;
int dayoff;
public:
employee(char *a,char*b,int c,int d,int e):person(a,b,c),salary(d),dayoff(e){}
void show()
{
cout<<"basicSalary:"< cout<<"leavedays:"< }
};
class manger:public employee
{
float performance;
public:
manger(char *a,char*b,int c,int d,int e,float f):employee(a,b,c,d,e),performance(f){}
void show()
{
cout<<"performance:"< }
};
int main()
{
char a[20],b[20];
int c,d,e;
float f;
manger *t;
while(cin>>a>>b>>c>>d>>e>>f)
{

t= new manger(a,b,c,d,e,f);
t->person::show();
t->employee::show();
t->show();
delete (t);
}

}
我的问题是 1为什么每新建一个对象都得为name和sex申请内存,不然每个对象的name和sex都一样?
2为什么上面的指针释放方式不对?必须把delete (t)放在while循环外?
最佳答案
1.  构造函数内有句name=a;
要改成strcpy(name,a);  (最主要的问题)

  在employ的show()中,第一句写:
先调用基类的show

   person::show();
同理在manager的show中,先调用:
employ::show();
这样,主函数中只需一个show:
t->show();

 

2. 正是如此,每个新建对象必须一样,不然就是同一地址。不然name就指向参数a,
如果没有name=new char[strlen(a)+1];   就指向了参数a的首地址,析构时会出错;
必须为每个对象分配内存,才能互不影响;如:
person *p1,*p2;
char name[10]="abc";

p1=new person(name,"d",3);

p2=new person(name,"dd",20);
delete p1; p1=NULL;
p2不受影响;




3. 要把delete t放在while内。
全部回答
1:是的,要不可以定义成静态的数组就不用申请了;要公用的话一定要定义成static类型的 2:放外面有严重的内存泄露,如果放里面不行就是有bug了,请检查下程序中有没有判空就释放了 再看看别人怎么说的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
稍稍在文言文中的意思
维生素D缺乏病主要发生的人群是(  )。A.
如何正确看待供给侧改革可能引发
电脑很卡,速度很慢,请教如何处理:
自考获得学士学位的几率
这位模特叫什么名字
取消铁道部后火车票会涨价吗?
恒健按摩院地址在什么地方,想过去办事
腰椎间盘突出症,最常见的临床症状是A.伸腰痛
玻璃水可以用水代替吗
男生为啥很主动
钢铁牌号DC51D+Z与DC51D+ZF的区别是什么
英孚教育青少儿英语丰台方庄中心在什么地方啊
洛阳的驾照丢了,在郑州能补办吗
在货币当局资产负债表中应填列在负债方的项目
推荐资讯
韩国原装进口neo美瞳小直径小黑环自然美瞳年
对于新产品、新行业和新市场的需求预测适合采
G11鹤大高速出口(入口)在哪里啊,我有事要去
建筑物内电气设备的外露可导电部分(金属外壳)
有时候口急怎么办 好痛苦
威宝的蓝桥移动硬盘如何拆解
科勒马桶型号780(3D钻石款)300坑距的实际安
哈弗h6断电正负线接反了中控没有了
东莞市厚街镇大和派遣劳务所在哪?急急急!
因式分解题,急
丹东市人民医院-综合楼怎么去啊,有知道地址
【宇宙真理】为什么朝鲜说它们已经掌握了宇宙
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?