一道有意思的面试题

picop 2008-01-08 07:16:40
下午去面试,碰到这样一道题

有代码如下:
foo()
{
AAA aa=new AAA();
otherfunction()
delete aa;
}

请问这样写会带来什么可能的问题?

(我平时就是这么写的,会有什么问题啊,大汗....)
...全文
202 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
awpatp 2008-01-08
  • 打赏
  • 举报
回复
同意CAD_VC。
Effective C++ 条款13,以对象管理资源中有相关论述。
p0303230 2008-01-08
  • 打赏
  • 举报
回复
没有判断是否分配成功

dtor 2008-01-08
  • 打赏
  • 举报
回复
otherfunction()可能会直接返回,而退出函数f00,导致delete aa没有执行。
可以使用只能指针 std::auto_ptr<AAA> ptrA(new AAA());
也可以在otherfunction()返回之前,将delete aa执行。
hastings 2008-01-08
  • 打赏
  • 举报
回复
otherfunction()
中抛出了异常怎么办?显然,其后面的代码就不能执行到了。
另一种可那就是,在otherfunction()也delete了一次,
这样就会delete两次。
不知还有没有补充?
vrace 2008-01-08
  • 打赏
  • 举报
回复
这种环境下应该用 std::auto_ptr 来处理比较好

foo()
{
std::auto_ptr<AAA> ptrA(new AAA());
otherfunction();
}
vrace 2008-01-08
  • 打赏
  • 举报
回复
同意 cad_vc
cad_vc 2008-01-08
  • 打赏
  • 举报
回复
otherfunction()函数里可能异常退出,使delete aa;无法执行造成内存泄漏。
flyingwow99 2008-01-08
  • 打赏
  • 举报
回复
关键是没有检查new操作失败吧.....
otherfunction()里理论上做什么都有可能, 不可能在这个函数之外想着怎么防止它内部做一些非法的事情,那是它自己的问题
hai040 2008-01-08
  • 打赏
  • 举报
回复
没*应该是笔误
otherfunction可以改变aa?
这样会不会好点
AAA* const aa = new AAA();
supplyment2 2008-01-08
  • 打赏
  • 举报
回复
就是后来其他地方如果使用到otherfunction可能出问题了?
Pipi0714 2008-01-08
  • 打赏
  • 举报
回复
应该是这样:

foo()
{
AAA *aa = new AAA();
otherfunction();
delete aa;
}


可能造成otherfunction访问的内存在aa指定的内存块中,留下隐患或者delete aa出现异常。
阿呆_ 2008-01-08
  • 打赏
  • 举报
回复
AAA是类指针? 如果不是的话怎么可以delete? 如果是的话怎么可以AAA()?

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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