基类指针指向派生类对象,基类指针的首地址永远指向子类从基类继承的基类首地址

news/2025/1/13 6:01:03/

文章目录

      • 基类指针指向派生类对象,基类指针的首地址永远指向子类从基类继承的基类起始地址。
      • 代码
      • 代码2

基类指针指向派生类对象,基类指针的首地址永远指向子类从基类继承的基类起始地址。

代码

#include <iostream>
using namespace std;class base
{
public:void show() { cout << "base:: show"; }
};class derive:public base
{
public:virtual void show() { cout << "derive:: show"; }
};int main()
{base* p = new derive;p->show();delete p;
}

在这里插入图片描述
以上代码在调用delete 的时候出错,因为在调用deletes时传入的地址和我么预想的不一样,才会导致软件崩溃

代码2

#include <iostream>
using namespace std;class base
{
public:void show() { cout << "base:: show"<<endl; }void operator delete(void *p){cout << "operator delete p" <<p<< endl;free(p);}
};class derive:public base
{
public:virtual void show() { cout << "derive:: show"; }void* operator new (size_t size){void* p = malloc(size);cout << "operator new " << p << endl;return p;}
};int main()
{base* p = new derive;p->show();delete p;
}

在这里插入图片描述

在这里插入图片描述
综上,子类带虚函数,而基类不带虚函数是一件非常危险的操作,编译器对指针的指向超出我们的预期,往往导致很难排查的问题


http://www.ppmy.cn/news/1562731.html

相关文章

机器学习算法(二): 朴素贝叶斯(Naive Bayes)

1. 实验室介绍 1.1 实验环境 1. python3.7 2. numpy > 1.16.4 3. sklearn > 0.23.1 1.2 朴素贝叶斯的介绍 朴素贝叶斯算法&#xff08;Naive Bayes, NB) 是应用最为广泛的分类算法之一。它是基于贝叶斯定义和特征条件独立假设的分类器方法。由于朴素贝叶斯法基于贝叶…

Ruby语言的软件开发工具

Ruby语言的软件开发工具探索 Ruby语言以其简洁优雅的语法和强大的面向对象特性而受到广泛欢迎。作为一种动态、反射性强的编程语言&#xff0c;Ruby具有很高的开发效率&#xff0c;适用于各种类型的开发&#xff0c;从Web应用到命令行工具&#xff0c;都能得到很好的支持。在R…

Playwright vs Selenium:全面对比分析

在现代软件开发中&#xff0c;自动化测试工具在保证应用质量和加快开发周期方面发挥着至关重要的作用。Selenium 作为自动化测试领域的老牌工具&#xff0c;长期以来被广泛使用。而近年来&#xff0c;Playwright 作为新兴工具迅速崛起&#xff0c;吸引了众多开发者的关注。那么…

Vue3.5 企业级管理系统实战(二):Router、Pinia 及 Element-Plus 集成

1 Vue Router 集成 1.1 安装 vue-router 通过 pnpm 安装 Vue Router pnpm i vue-router 1.2 配置 Router 在 src 文件夹下新建 views 文件夹&#xff0c;新建文件 Home.vue 和 About.vue 在 src 文件夹下新建 router 文件夹&#xff0c;在 router 下新建 index.ts 用来配置…

LLM - Llama 3 的 Pre/Post Training 阶段 Loss 以及 logits 和 logps 概念

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145056912 Llama 3 是 Meta 公司发布的开源大型语言模型&#xff0c;包括具有 80 亿和 700 亿参数的预训练和指令微调的语言模型&#xff0c;支持…

spring mvc源码学习笔记之七

我们都知道&#xff0c;spring mvc 有处理器适配器、处理器映射器、视图解析器等几个非常重要的核心组件&#xff0c;学习 spring mvc 就是学习这些组件。 本文我们就来简单看下这些组件的默认值。 下面这段代码是从 DispatcherServlet 的源码中拷贝的 static {// Load defau…

pip工具安装第三方库

使用pipcmd引入第三方库 pip 是 Python 包管理工具&#xff0c;提供了对 Python 包的查找、下载、安装、卸载的功能。 注意&#xff1a;pip 已内置于 Python 3.4 和 2.7 及以上版本&#xff0c;其他版本需另行安装 常规命令&#xff1a; pip install 安装第三方库的库名 &…

在UE5中使用视差贴图

视差贴图是一项不用改动模型顶点&#xff0c;通过对相机向量进行计算、修改通过视差实现模型凹凸感的技术&#xff0c;通常运用于地面&#xff0c;配合法线贴图增强凹凸表现。 UE中封装了视差贴图节点ParallaxOcclusionMapping&#xff0c;可以很方便的制作出效果较好的视差效…