`
kmplayer
  • 浏览: 499352 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于empty class的大小

阅读更多
1,首先简要说明下为什么empty class的大小不是0?
这是因为c++标准有个规定,操作符new object必须返回一个唯一的指针指向一个对象,如果empty大小为0,无疑底层的操作将是malloc(0)等等之类,则返回NULL或出错,因此设定其为1。
实际应用中,如果一个empty作为一个子类的基类或虚基类,编译器都会作一些特殊处理,去掉这个额外的1。
#include<iostream>
using namespace std;

class A
{
};

class B : public A
{
public:
    int v;
};

class C : virtual public A
{
public:
    int v;
};

int main()
{
    cout << sizeof(A) << endl;
    //1
    cout << sizeof(B) << endl;
    //4:对empty base作了特殊处理
    cout << sizeof(C) << endl;
    //8 同样对empty virtual base作了特殊处理
    return 0;
}
分享到:
评论

相关推荐

    Class_QRCode.php

    if (isset($logo) && empty($logo)) { $QR = imagecreatefromstring(file_get_contents&#40;$QRUrl&#41;); $logo = imagecreatefromstring(file_get_contents&#40;$logo&#41;); $QR_width = imagesx($QR); //...

    Jasper_Report用户手册

    Empty Data Source Behavior Scriptlet Class 5 报表数据(Report Date) 5.1 表达式(expressions) 5.2 参数(Parameters) 参数名 参数类型 Prompting for Parameter values 参数的默认值(parameter default ...

    SOY Framework框架Java RCP编程(一)--配置开发环境

    3.全新的模式开发C/S客户端,无需布局,无需调整控件和组件的大小,不懂Swing也可以快速开发界面。 4.Spring+Hibernate的轻量级架构轻松开发业务逻辑。 5.提升用户体验,提高最终用户满意度,快速开发企业...

    LCRapidDevelop-master

    progress.showEmpty(getResources().getDrawable(R.mipmap.monkey_cry),Constant.EMPTY_TITLE,Constant.EMPTY_CONTEXT); } } ``` ##轻松实现视频列表播放 列表部分和上面的一样就不说了,我这边主要描叙视频播放的...

    Queue 实现生产者消费者模型(实例讲解)

    Python中,队列是线程间最常用的交换数据的形式。 Python Queue模块有三种队列及构造函数: 1、Python Queue模块的FIFO队列先进先出。 class Queue.Queue(maxsize)...q.empty() 如果队列为空,返回True,反之False q.full

    用C++实现一个链式栈的实例代码

    //自己构造一个链式栈,具有push(入栈),pop(出栈),top(取得栈顶元素),size(返回栈大小),empty(判断是否为空)等功能#include “stdafx.h”#include &lt;iostream&gt;using namespace std;//构造栈的节点...

    浮点vfdsfJAVA实现链表,双向链表.txtJAVA实现链表,双向链表.txt

    &lt;div class="ad_area_1"&gt; &lt;div class="ad_w728"&gt; &lt;!-- 广告位:下载频道首页头文件上 220*90 --&gt; &lt;script type="text/javascript"&gt;BAIDU_CLB_fillSlot("198363"); &lt;div class="ad_w220"&gt; &lt;!-- ...

    怎样设置打印报表时运用自己的纸张格式

    //根据纸张名称获取其所在本地机上的PaperSize:调用的是PaperSizeGetter.Get_PaperSizes静态方法(是从水晶报表中reflect精简出来的,版权归原作者所有) &lt;br&gt; public class PaperSizeGetter { public ...

    数据结构 简单的栈

    class stack { private: int a[5]; //栈的大小 int n; //记录数组的下标 int t; //头指针? public: stack(); //构造函数 int push(int); //进栈 int show(); //出栈 bool empty(); //是否为空 bool full(); ...

    leetcodepushfront-implement-queue-using-stacks:使用栈实现队列

    您必须仅使用堆栈的标准操作——这意味着只有推到顶部、从顶部查看/弹出、大小和为空操作是有效的。 根据您的语言,堆栈可能不受本机支持。 您可以使用列表或双端队列(双端队列)来模拟堆栈,只要您仅使用堆栈的...

    leetcodepushfront-implement-stack-using-queues:使用队列实现堆栈

    您必须只使用队列的标准操作——这意味着只有向后推、从前面查看/弹出、大小和为空操作是有效的。 根据您的语言,队列可能不受本机支持。 您可以使用列表或双端队列(双端队列)来模拟队列,只要您仅使用队列的标准...

    algs4_Queues:算法 v4 队列分配

    如果 k &gt; N(字符串输入的大小),则不会检查错误。 API如下 // A Deque: queue/stack like data structure with insert/extract from both ends public class Deque&lt;Item&gt; implements Iterable&lt;Item&gt; { public ...

    arcgis工具

    层Landuse 的栅格大小,这里指定为25 指定输出栅格的名称为路径 执行命令: &lt;空间分析&gt;-&lt;栅格计算器&gt; 构造表达式:[Landuse]*[polyClip4-polyclip4] ,执行栅格图层:Landuse 和 用以剪切 的栅格polyClip4 之间的...

    leetcode添加元素使和等于-Algorithm_With_Python:Algorithm_With_Python

    is_empty判断栈是否为空: return not bool(self.stack) size栈的大小: return len(self.stack) 应用 功能 描述 balanced_parentheses() 1_001有效括号字符串:左括号必须用相同类型的右括号闭合。左括号必须以正确...

    华西网源码

    --{if empty($_G['cookie']['myportal_fid']) || $_G['cookie']['myportal_fid']==2}--&gt; active&lt;!--{/if}--&gt;" onclick="hxportal.loadThreadList({fid:2,scroll:'#sec4',target:'#sec4_1_c'});" href="#"&gt;吃货探店 ...

    [WPF] WPF学习分组、对齐、排序、序列化和常用功能

    where item.ParentID == Guid.Empty select item; Rect rect = GetBoundingRectangle(items); DesignerItem groupItem = new DesignerItem(); groupItem.IsGroup = true; groupItem.Width = rect.Width; ...

    ICSharpCode.SharpZipLib 最新版

    public class ZipClass { /// /// 所有文件缓存 /// List&lt;string&gt; files = new List(); /// /// 所有空目录缓存 /// List&lt;string&gt; paths = new List(); /// /// 压缩单个文件 /// /// 要压缩...

    海康卫视开发dll文件

    public class HKWS : IDisposable { #region (0)变量定义 /// /// 发现的文件信息结构 /// private readonly NetSDK.NET_DVR_FIND_DATA[] FindData = new NetSDK.NET_DVR_FIND_DATA[1000]; /// /// ...

    ASP.NET Gridview隐藏/显示列源码

    这个hyperlink通过它的onclick事件调用一个HideCol的Javascript方法,CSS类用来增加负号的大小,当每个数据行被创建的时候,一个Id将会被添加到每行中用来让Javascript区分每一行. 代码 protected void GridView1_...

    css入门笔记

    4、spread:阴影的大小,指定要在基础阴影上扩充出来的大小距离,取值以px为单位的数值 5、color:阴影颜色 6、inset:将默认外阴影转为内阴影 在第一位 4、轮廓 轮廓指的是边框的边框,绘制于边框外的线条。 ...

Global site tag (gtag.js) - Google Analytics