基类指针指向派生类对象,基类指针的首所在永世指向子类从基类继续的基类首所在

[复制链接]
发表于 2025-11-11 05:19:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
基类指针指向派生类对象,基类指针的首所在永世指向子类从基类继续的基类起始所在。

代码

  1. #include <iostream>
  2. using namespace std;
  3. class base
  4. {
  5. public:
  6.         void show() { cout << "base:: show"; }
  7. };
  8. class derive:public base
  9. {
  10. public:
  11.         virtual void show() { cout << "derive:: show"; }
  12. };
  13. int main()
  14. {
  15.         base* p = new derive;
  16.         p->show();
  17.         delete p;
  18. }
复制代码

以上代码在调用delete 的时间堕落,由于在调用deletes时传入的所在和我么预想的不一样,才会导致软件瓦解
代码2

  1. #include <iostream>
  2. using namespace std;
  3. class base
  4. {
  5. public:
  6.         void show() { cout << "base:: show"<<endl; }
  7.         void operator delete(void *p)
  8.         {
  9.                 cout << "operator delete p" <<p<< endl;
  10.                 free(p);
  11.         }
  12. };
  13. class derive:public base
  14. {
  15. public:
  16.         virtual void show() { cout << "derive:: show"; }
  17.         void* operator new (size_t size)
  18.         {
  19.                 void* p = malloc(size);
  20.                 cout << "operator new " << p << endl;
  21.                 return p;
  22.         }
  23. };
  24. int main()
  25. {
  26.         base* p = new derive;
  27.         p->show();
  28.         delete p;
  29. }
复制代码


综上,子类带虚函数,而基类不带虚函数是一件非常伤害的操纵,编译器对指针的指向超出我们的预期,每每导致很难排查的标题
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表