一道面试题

zwicker 2009-03-05 11:36:43

class CarMgr{
public:
CarMgr(int n);
~CarMgr();
private:
Car **CarArray;//Car为代表汽车类
char *model;//汽车型号
int number;
};

请写出构造函数和析构函数
题目信息就这些,只要大概写一下构造函数和析构函数就行
...全文
401 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
海枫 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 amossavez 的回复:]
楼上的有更好的?!
[/Quote]

就下面这个例子

CarMgr(int n)
{
int number = n;
*CarArray = (Car*)new Car[number];
if(*CarArray == NULL)
{
cout<<"内存分配失败"<<endl;
exit(1);

}
model = new char;//车的型号默认分配一个字节,因为没有给出更多提示,相信在后续操作中肯定会有
if(NULL == model)
{
cout<<"内存分配失败"<<endl;
exit(1);

}
cout<<"构造函数"<<endl;
}


>>>>>>>>. model = new char;
这句话,如果new分配内存失败,则抛出一个异常,整个CarMgr的constructor就会失败,那么前面分配的*CarArray = (Car*)new Car[number];刚没有回收。这不是内存leake吗?

请不要说,这种情况很少发生;但如果真的发生了呢?
zwicker 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 tugouxp 的回复:]
凡是上来就写*CarArray =xxx的都是错误的,cararray还没有分配内存地址怎么能直接反引用呢????所以楼上大部分都是错的,29,30,32楼的我比较同意,避免了这个问题,起码是可以运行的。
[/Quote]
有理
cameracanon 2009-03-06
  • 打赏
  • 举报
回复
UP一下
papaofdoudou 2009-03-06
  • 打赏
  • 举报
回复
再顶下,继续讨论这个问题!
sendto66 2009-03-06
  • 打赏
  • 举报
回复
ding
papaofdoudou 2009-03-06
  • 打赏
  • 举报
回复
凡是上来就写*CarArray =xxx的都是错误的,cararray还没有分配内存地址怎么能直接反引用呢????所以楼上大部分都是错的,29,30,32楼的我比较同意,避免了这个问题,起码是可以运行的。
zwicker 2009-03-05
  • 打赏
  • 举报
回复
没人会吗
jack_za123 2009-03-05
  • 打赏
  • 举报
回复
*CarArray = (CarMgr*)malloc(sizeof(CarMgr)*number) 我觉的它构造函数,应该就是做这个内存分配吧

析购就 free(*CarArray)吧,我也不知道我的想法对不对,看能不能给你点思路



zwicker 2009-03-05
  • 打赏
  • 举报
回复
自己顶,有人做下吗,我面试时就这样告诉我的,就这些条件,大概写下构造函数和析构函数就行
qq675927952 2009-03-05
  • 打赏
  • 举报
回复
这要具体分析吧,你只要给CarArray 和model申请一下空间,并且对他们,还有number进行初化一下就行了,注意要调用Car类 构造函数,
大宝 2009-03-05
  • 打赏
  • 举报
回复
关注
iory_526 2009-03-05
  • 打赏
  • 举报
回复

class Car
{
public:
Car(){cout << "In Car"<< endl;}

~Car(){cout << "Out Car"<< endl;}
};

class CarMgr
{
public:
CarMgr(int n);
~CarMgr();
public:
Car **CarArray;//Car为代表汽车类
char *model;//汽车型号
int number;
};

CarMgr::CarMgr(int n):number(n),model(NULL)
{
CarArray = new Car*;
*CarArray = (Car*)new Car[number];


}

CarMgr::~CarMgr()
{
Car* tmp = *CarArray;
delete[] tmp;
delete CarArray;
}

void main()
{
CarMgr(3);


}

我这样试了一下,貌似也可以,请大牛指点了。
iory_526 2009-03-05
  • 打赏
  • 举报
回复
顶楼上这个,要先给那个指针数组分配空间。
chen_yuan 2009-03-05
  • 打赏
  • 举报
回复

class Car
{
};
class CarMgr
{
public:
CarMgr(int n)
{
number = n;
CarArray = new Car* [number];
for (int i=0; i<number; ++i)
{
CarArray[i] = new Car();
}
}

~CarMgr()
{
for (int i=0; i<number; ++i)
{
delete CarArray[i];
}
delete []CarArray;
}

private:
Car **CarArray;//Car为代表汽车类
char *model;//汽车型号
int number;
};
chen_yuan 2009-03-05
  • 打赏
  • 举报
回复

class Car
{
};
class CarMgr
{
public:
CarMgr(int n)
{
number = n;
CarArray = new Car* [number];
for (int i=0; i<10; ++i)
{
CarArray[i] = new Car();
}
}

~CarMgr()
{
for (int i=0; i<number; ++i)
{
delete CarArray[i];
}
delete []CarArray;
}

private:
Car **CarArray;//Car为代表汽车类
char *model;//汽车型号
int number;
};
amossavez 2009-03-05
  • 打赏
  • 举报
回复
楼上的有更好的?!
海枫 2009-03-05
  • 打赏
  • 举报
回复
上述答案,memory leakage一大堆问题。
zwicker 2009-03-05
  • 打赏
  • 举报
回复
以上没有一个答案是正确的,求高手现身
zwicker 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 jaycnvip 的回复:]
C/C++ code
#include <iostream>
#include <stdlib.h>
using namespace std;
//请写出构造函数和析构函数
class Car
{

};
class CarMgr{
public:
CarMgr(int n)
{
int number = n;
*CarArray = (Car*)new Car[number];
if(*CarArray == NULL)
{
cout<<"内存分配失败"<<endl;
exit(1);

}
model = new cha…
[/Quote]

运行时发生错误
zwicker 2009-03-05
  • 打赏
  • 举报
回复
自己顶一个
加载更多回复(18)

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧