这样会出现内存泄漏吗?

ffimm 2003-02-27 04:26:10
class base{
public:
int i;
base():i(1){}
};

class derived :public base{
public:
int j;
derived():j(2){}
};

main()
{ pd=new derived();
base* pb=(base*)pd;
delete pb;
}
这样会出现内存泄漏吗?也就是向上类型转换后,能够直接delete转换得来得基类指针吗?谢谢了


...全文
52 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
brucegong 2003-02-27
  • 打赏
  • 举报
回复





比内存泄漏更加可怕的是“踩内存”







windcsn 2003-02-27
  • 打赏
  • 举报
回复
不会,因为在类的定义是,base类的构造函数都是虚的,需要调用子类的构造函数来处理
积木 2003-02-27
  • 打赏
  • 举报
回复
因为你的这两个类根本没有申请什么额外的资源,所以不会出问题,但是你应该
将你的析构函数加上virtual 以保证在delete时 能调用正确的(或相应的)析构函数
cenlmmx 2003-02-27
  • 打赏
  • 举报
回复
能提供造成内存泄漏的示例吗?(反面教材)
ffimm 2003-02-27
  • 打赏
  • 举报
回复
不过还有一点觉得很奇怪,上面得程序,就算没有delete pb语句,居然在vc下面运行得时候
也没有memory leak。为什么压?在堆中分配的内存不是应该显式delete掉吗?

main()
{ derived* pd=new derived();
}
问题可能很菜,可是的确很想不通压?
langzi8818 2003-02-27
  • 打赏
  • 举报
回复
当然不会了;
指针嘛
liu_feng_fly 2003-02-27
  • 打赏
  • 举报
回复
不会是因为你很幸运,你的程序碰巧没有问题,注意,是碰巧,不是应该。这样的程序还是不要写好。如果你非要这么做,记得给基类加上virtual destructor
winco 2003-02-27
  • 打赏
  • 举报
回复
不会吧
cenlmmx 2003-02-27
  • 打赏
  • 举报
回复
up
brucegong 2003-02-27
  • 打赏
  • 举报
回复





不会。

你的指针的位置没有变化。在你可用的内存空间前面还有几个字节的描述信息,它们没有被踩掉,所以你的内存可以正确释放










69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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