有关多继承中虚拟继承对象删除的问题(c++)

sweetrryy 2009-06-07 10:36:32
先上代码

#include<iostream>
using namespace std;
class Student
{
//...
};
class ssStudent:virtual public Student
{
//...
};
//.......
int main()
{
Student* p;
p=new ssStudent;
delete p;
return 0;
}
代码编译通过
执行的时候出现
_BLOCK_TYPE_IS_VALID(pHead->nBlockUse 错误,各位高手请问是何原因?
这个地方的确需要通过基类指针调用子类,然后进行删除,并且需要使用虚拟继承 那如何改动才能导致没有错误呢?
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fairchild811 2009-06-07
  • 打赏
  • 举报
回复
用virtual的析构函数
red_berries 2009-06-07
  • 打赏
  • 举报
回复
在Student 类内加上
virtual ~Student()
{}
就好了,用指向基类的指针来 delete 派生类指针,基类必须有虚析构函数,出错的提示是 Debug版的检测错误提示
Jalien 2009-06-07
  • 打赏
  • 举报
回复
以下代码VS 2008编译通过

#include <iostream>
using namespace std;
class Student
{
public:
virtual ~Student(){};//虚析构函数!!!
};
class ssStudent:virtual public Student
{
//...
};
//.......
int main()
{
Student* p;
p=new ssStudent;
delete p;
return 0;
}
mengde007 2009-06-07
  • 打赏
  • 举报
回复
完整代码贴过来;
neohope 2009-06-07
  • 打赏
  • 举报
回复
你没有多重继承,用virtual干什么?
再说pHead->nBlockUse在哪里?

65,211

社区成员

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

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