本篇笔记主要分为两个主要部分,第一部分关于对象模型,第二部分是关于new和delete的更加深入的学习。 对象模型 关于vptr(虚指针)和vtbl(虚函数表) 只要用到了虚函数,对象中就会多一个指向虚函数表的虚指针。在32位环境下,将占4Bytes的空间。 在vtbl中,每一项都是指向自己类应当调 ...
分类:
编程语言 时间:
2016-08-05 17:26:31
阅读次数:
239
1. 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。
2. 存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。
3. 多态性是一个接口多种实现,是面向对象的核心。分为类的多态性和函数的多态性。
4. 多态用虚函数来实现,结合动态绑定。
5. 纯虚函数是虚函数再加上= 0。
6. 抽象类是指包...
分类:
编程语言 时间:
2016-07-16 23:46:56
阅读次数:
493
大家对虚表并不陌生,都知道每个含有虚函数的类对象都有1个虚指针,但是在现实使用中,却总是因为这而调试半天,才发现原来是虚指针惹的祸。我这几天在调试代码时候也中招了,我的问题是这样的,如下图,CTree是最底层基类(非虚类), CSamplerTree(虚类)派生自CTree,CMSamplerTre ...
1.vptr和vtbl 当存在虚函数就会出现虚指针vptr指向虚函数所在位置vtbl 将vptr实现vtbl内容翻译为C: (*p->vptr)n; (* p->vptr[n])(p); 动态绑定: 虚机制 1.指针 2.向上转型保证安全 3.调用的是虚函数 2.this指针 [Template M ...
分类:
编程语言 时间:
2016-06-11 22:49:46
阅读次数:
240
C++内存分布 虚表 虚指针:
class Base
{
public:
int m_base;
}; class DerivedA: public Base
{
public:
int m_derivedA;
}; class DerivedB: public Base
{
public:
int m_derivedB;
}; class D...
分类:
编程语言 时间:
2016-05-18 19:08:44
阅读次数:
287
什么是C++对象模型?引用《深度探索C++对象模型》中的两个概念:语言中直接支持面向对象程序设计的部分对各种支持的底层实现机制Inmyopinion对象模型是对象在存储空间上的空间比时间更优,并对C++面向对象的技术加以支持,如虚指针虚表指针支持多态性。什么是多态?●多态C++中..
分类:
编程语言 时间:
2016-05-10 18:53:00
阅读次数:
197
1. 传统继承类的设计 static void print_object(const char* name, void* this_, size_t size) { void** ugly = reinterpret_cast(this_); size_t i; printf("created %s... ...
分类:
编程语言 时间:
2016-04-22 09:26:12
阅读次数:
310
DirectShow 是一个 Windows 平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。 Filter 实质是一个 COM 组件,所以学习开发 Filter 前你应该对 COM 相关知识有点了解。COM 组件的实质是实现了纯虚指针接口的 C++ 对象。 应用程序开发者只需要基本的 C
分类:
其他好文 时间:
2016-02-21 16:54:27
阅读次数:
301
C++中虚函数的实现机制主要是VTable和虚指针。详细如下:
class A {
public:
virtual void f1();
virtual void f2();
private:
int a;
}
class B {
public:
void f1();
private:
int b;
}
如上A,B两个类,编译器为A类准备了一个虚...
分类:
编程语言 时间:
2015-07-27 19:05:27
阅读次数:
152
很多教材上都有介绍到虚指针、虚函数与虚函数表,有的说类对象共享一个虚函数表,有的说,一个类对象拥有一个虚函数表;还有的说,无论用户声明了多少个类对象,但是,这个VTABLE虚函数表只有一个;也有的在说,每个具有虚函数的类的对象里面都有一个VPTR虚函数指针,这个指针指向VTABLE的首地址,每个类的对象都有这么一种指针。今天,我们就来解决这个问题,同一个类的不同对象,是不是拥有“相同”的虚函数表,这个相同是物理上的相同(内存地址)还是逻辑上的相同(数据结构)。本文现详述如下!...
分类:
编程语言 时间:
2015-07-26 17:24:57
阅读次数:
148