C++子类指针赋值给父类的问题

dk_zhe 2014-04-09 02:25:22
class A
{

};
class B : public A
{
};

A *p_A=new B;
和A *p_A=NULL; B * p_B=new B; p_A=p_B;两种写法有何区别。

我有一段代码按照下面的方式处理的,结果delete p_A;时崩溃。(父类指针已经判空了)

为何呢?
...全文
483 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2014-04-09
  • 打赏
  • 举报
回复
dk_zhe 2014-04-09
  • 打赏
  • 举报
回复
引用 10 楼 zcdabing 的回复:
没代码怎么破,自己再检查吧 A *p_A=NULL; B * p_B=new B; p_A=p_B; 这么写可能崩溃的情况,先delete p_B了?


A* pa=new A;
B* pb=new B;
pa=pb;
delete pb;
delete pa;
问题应该找到了,有一种情况下子类B被提前处理,并且释放了。由于处理B的代码是由他人封装的,所以没往那方面想。 其实问题很简单,偏偏没想到,一语点醒梦中人啊,谢了。
CyberLogix 2014-04-09
  • 打赏
  • 举报
回复
还是实际情况实际处理吧,很有可能是别的问题
dk_zhe 2014-04-09
  • 打赏
  • 举报
回复
引用 10 楼 zcdabing 的回复:
没代码怎么破,自己再检查吧 A *p_A=NULL; B * p_B=new B; p_A=p_B; 这么写可能崩溃的情况,先delete p_B了?


A* pa=new A;
B* pb=new B;
pa=pb;
delete pb;
delete pa;
我再自己好好看看吧,纠结的问题啊
zcdabing 2014-04-09
  • 打赏
  • 举报
回复
没代码怎么破,自己再检查吧 A *p_A=NULL; B * p_B=new B; p_A=p_B; 这么写可能崩溃的情况,先delete p_B了?


A* pa=new A;
B* pb=new B;
pa=pb;
delete pb;
delete pa;
dk_zhe 2014-04-09
  • 打赏
  • 举报
回复
引用 5 楼 lilianjie001 的回复:
楼主你上面这么写是没问题的,2中写法一样。这样看不出问题来,贴出代码来
代码贴不出来,研发环境和上外网的环境不一样,不是同一台机器。问题就是我抽象出的这种问题
dk_zhe 2014-04-09
  • 打赏
  • 举报
回复
引用 3 楼 zcdabing 的回复:
[quote=引用 2 楼 dk_zhe 的回复:] [quote=引用 1 楼 zcdabing 的回复:] 没有虚函数就没有多态,内存泄露了,兄弟
重点不在这,实际代码中析构函数是virual的。而且不是内存泄露,是程序直接崩了。[/quote] 那把代码贴出来啊[/quote] 代码贴不出来,研发环境和上外网的环境不一样,不是同一台机器。
dk_zhe 2014-04-09
  • 打赏
  • 举报
回复
引用 4 楼 derekrose 的回复:
http://codepad.org/hDlQ9X7D 你是说这样吗
差不多就是这样的,为啥会崩溃呢。
昵称很不好取 2014-04-09
  • 打赏
  • 举报
回复
没有问题,放心用 如果crash,使用gdb调试下,看看crash时候的堆栈
lilianjie001 2014-04-09
  • 打赏
  • 举报
回复
楼主你上面这么写是没问题的,2中写法一样。这样看不出问题来,贴出代码来
derekrose 2014-04-09
  • 打赏
  • 举报
回复
http://codepad.org/hDlQ9X7D 你是说这样吗
zcdabing 2014-04-09
  • 打赏
  • 举报
回复
引用 2 楼 dk_zhe 的回复:
[quote=引用 1 楼 zcdabing 的回复:] 没有虚函数就没有多态,内存泄露了,兄弟
重点不在这,实际代码中析构函数是virual的。而且不是内存泄露,是程序直接崩了。[/quote] 那把代码贴出来啊
dk_zhe 2014-04-09
  • 打赏
  • 举报
回复
引用 1 楼 zcdabing 的回复:
没有虚函数就没有多态,内存泄露了,兄弟
重点不在这,实际代码中析构函数是virual的。而且不是内存泄露,是程序直接崩了。
zcdabing 2014-04-09
  • 打赏
  • 举报
回复
没有虚函数就没有多态,内存泄露了,兄弟

65,208

社区成员

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

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