虚函数表:QT5与VS2015的差异
问题原自下面一段代码:
初学C++虚函数表时,以下代码在QT和VS(版本如题)编译结果不同。
#include <iostream>
using namespace std; class Demo
{
public:
Demo()
{
cout << "Demo()" << endl;
}
virtual ~Demo()
{
cout << "~Demo()" << endl;
}
virtual void Fun1()
{
cout << "Fun1()" << endl;
}
virtual void Fun2()
{
cout << "Fun2()" << endl;
}
virtual void Fun3()
{
cout << "Fun3()" << endl;
}
}; typedef void(FUN)();
int main()
{
Demo D1; int *p = (int *)&D1; FUN * pFun = (FUN *)*((int*)*p + );
pFun(); return ;
}
程序目的是运行Demo类虚函数表第二项。
VS运行成功,QT运行失败。调试了一下,发现如下现象:
VS2015:
QT5:
可见,VS和QT编译运行方式是有差异的,区别在于QT的Demo类的虚函数表的第一第二项都是析构函数,
个人感觉不太符合C++理论常识。
虚函数表:QT5与VS2015的差异的更多相关文章
- C++ 知道虚函数表的存在
今天翻看陈皓大大的博客,直接找关于C++的东东,看到了虚函数表的内容,找一些能看得懂的地方记下笔记. 0 引子 类中存在虚函数,就会存在虚函数表,在vs2015的实现中,它存在于类的头部. 假设有如下 ...
- swift protocol 见证容器 虚函数表 与 动态派发
一.测试代码: //protocol DiceGameDelegate: AnyObject { //} // //@objc protocol OcProtocol{ // @objc fun ...
- C++ 虚函数表解析
转载:陈皓 http://blog.csdn.net/haoel 前言 C++中 的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实 ...
- C++ 多态、虚函数机制以及虚函数表
1.非virtual函数,调用规则取决于对象的显式类型.例如 A* a = new B(); a->display(); 调用的就是A类中定义的display().和对象本体是B无关系. 2. ...
- C++迟后联编和虚函数表
先看一个题目: class Base { public: virtual void Show(int x) { cout << "In Base class, int x = & ...
- C++虚函数和虚函数表
前导 在上面的博文中描述了基类中存在虚函数时,基类和派生类中虚函数表的结构. 在派生类也定义了虚函数时,函数表又是怎样的结构呢? 先看下面的示例代码: #include <iostream> ...
- C++ Daily 《5》----虚函数表的共享问题
问题: 包含一个以上虚函数的 class B, 它所定义的 对象是否共用一个虚函数表? 分析: 由于含有虚函数,因此对象内存包含了一个指向虚函数表的指针,但是这个指针指向的是同一个虚函数表吗? 实验如 ...
- C++虚函数表
大家知道虚函数是通过一张虚函数表来实现的.在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承.覆盖的问题,其内容真是反应实际的函数.这样,在有虚函数的类的实例中,这个表分配在了这个实例的内存中 ...
- 对C++虚函数、虚函数表的简单理解
一.虚函数的作用 以一个通用的图形类来了解虚函数的定义,代码如下: #include "stdafx.h" #include <iostream> using name ...
随机推荐
- Factorial(hdu 1124)
Description The most important part of a GSM network is so called Base Transceiver Station (BTS). Th ...
- pyinstaller深入使用,打包指定模块,打包静态文件
1.标准用法: pyinstall **.py 直接打包 pyinstall -F **.py 打包成单文件 pyinstall -W **.py 去掉控制台窗口,黑窗口 p ...
- 记录前台js判断,如果为空,給议空的占位
这个主要是根据所有的值,按顺序输出,如果没有值,就给予空的占位, //页面加载的时候获取左边和右边的所有游客id var array_left_start = new Array(); ...
- MySql5.5安装详细说明
双击MySql5.5安装文件开始: next 打勾,Next 选Custom,原因如下面所述: Typical(典型安装) Installs the most common program fea ...
- union、union all 、distinct的区别和用途
1.从用途上讲 它们都具有去重的效果 2.从效率上讲 distinct通常不建议使用,效率较低;union all 和union 而言,union all效率更高;原因是:union 相当于多表查询出 ...
- JAVAEE 第七周
JSON语法: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集 ...
- hbase 概念
在hbase里面有几个通俗的名称会经常出现 1)Hregion = region 2)Hregionserver = regionserver 3)Hmaster = master 4)Hmamsto ...
- ES6常用方法总结
1.声明变量用let,声明常量用const(定义唯一的值),都没有预解释,也不存在变量提升: 2.箭头函数:有如下两种写法 1).表达式(函数体只有一行代码) a).let fn = p => ...
- webpack-dev-server报错
运行npm run dev报错,---- webpack-dev-server --inline --progress --config build/webpack.dev.conf.js npm E ...
- Linux 操作系统目录结构
/ 根目录 # ls /bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp var bin - ...