`
kmplayer
  • 浏览: 509780 次
  • 性别: 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;
}
分享到:
评论

相关推荐

    c_create_a_stack_class_code.rar_class A

    本程序代码实现了自定义的栈类(Class A),允许用户进行压栈、弹栈以及检查栈顶元素等基本操作。下面将详细解释这个栈类的设计思路和实现方法。 首先,栈类(Class A)通常包含以下几个核心成员: 1. **数据存储*...

    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); //...

    fengpeng_string_class-master.zip_Master Class

    - **大小和空判断**:获取字符串长度的`size()`函数,以及检查是否为空的`empty()`函数。 - **插入和删除**:在特定位置插入或删除字符或子串的函数。 - **格式化**:可能包含一些简单的格式化功能,如转换为大写或...

    class_fifo.zip_verilog 调用fifo

    根据所需容量,可以定义不同大小的二维数组来存储数据。 2. **写指针(Write Pointer)**:记录最新写入数据的位置。每次写操作后,指针加1,并进行循环处理,防止越界。 3. **读指针(Read Pointer)**:记录当前...

    改变无边框窗体大小.rar

    标题"改变无边框窗体大小.rar"以及描述中反复提及的关键词表明,这个压缩包文件可能包含了关于如何在没有系统默认边框的情况下,实现用户可以自由调整窗体大小的代码示例或教程。 在.NET Framework或.NET Core的...

    自己的队列类模板 Own queue class template

    以上就是关于自定义队列类模板的基本介绍,包括其核心成员函数`push`, `pop`, `destroy`, `front`, `empty`的实现思路。通过这个模板,我们可以为不同类型的数据创建队列,并根据需要扩展其功能。

    C# 开发的运行时可拖动和调整大小的控件

    public class DraggableResizableControl : Control { // 存储鼠标按下时的位置 private Point _dragStartPoint; // 控件的原始大小 private Size _originalSize; public DraggableResizableControl() { // ...

    Jasper_Report用户手册

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

    C++ Queue(带上限的)

    class BoundedQueue { private: std::deque&lt;T&gt; data; int maxSize; public: BoundedQueue(int size) : maxSize(size) {} void enqueue(const T& item) { if (data.size() &gt;= maxSize) { data.pop_front(); /...

    Android 开发,编程建立一个简单的进程内服务,实现比较两个整数大小的功能。服务提供Int Compare(Int, Int

    在本例中,我们将创建一个进程内的服务,其主要任务是接收两个整数参数并比较它们的大小。服务会提供一个名为`Compare(Int, Int)`的函数,返回较大的整数。这个功能虽然简单,但在某些场景下非常有用,例如作为其他...

    一次测试,快速队列大小根堆

    `std::priority_queue`的基本操作包括插入元素(push)、删除堆顶元素(top和pop)、查看堆顶元素但不删除(top)、以及检查堆是否为空(empty)。 描述中提到的“测试数据还没打包”,意味着这可能是一道编程题目...

    js评分星星

    &lt;i class="star star-empty"&gt; &lt;i class="star star-empty"&gt; &lt;i class="star star-empty"&gt; &lt;i class="star star-empty"&gt; &lt;i class="star star-empty"&gt; ``` 2. CSS样式:接下来,我们需要通过CSS定义星星的样式...

    城市联盟右下角弹出式滚动新闻代码(可关闭可控大小).zip

    $('.news-list').empty(); newsArray.forEach(function(news) { $('.news-list').append('&lt;li&gt;' + news + '&lt;/li&gt;'); }); } ``` 以上就是使用CSS3创建城市联盟右下角弹出式滚动新闻代码的基本思路。这个例子中,...

    java大作业:简单的纸牌游戏,比大小

    throw new IllegalStateException("Deck is empty"); } return cards.remove(0); } } ``` 现在我们有了基本的纸牌模型,接下来要设计游戏逻辑。我们可以创建一个`Player`类,它包含一个手牌(hand)列表,并...

    thinkphp文件处理类Dir.class.php的用法分析

    例如,你可以获取目录中的所有文件名、文件大小、创建时间等信息,这对于构建如日志管理、文件备份等功能十分方便。 总的来说,Dir.class.php为ThinkPHP的文件处理提供了便利,它使得开发者可以更便捷地进行文件和...

    js 滑动星星打分

    &lt;img src="images/star-empty.png" class="star" data-score="1"&gt; &lt;img src="images/star-empty.png" class="star" data-score="2"&gt; &lt;img src="images/star-empty.png" class="star" data-score="3"&gt; ...

    数据结构--栈--实现算法

    数组实现简单且效率高,但大小固定;链表实现则更灵活,可以动态扩展。 下面我们将以C++为例,讨论栈的两种常见实现: ### 数组实现 ```cpp #include class Stack { private: int* arr; int capacity; int ...

    类来实现堆栈

    6. **获取堆栈大小**(size):返回堆栈中元素的数量。 ```python def size(self): return len(self.items) ``` 以上就是一个基本的堆栈类实现。为了更好地理解这个类,我们可以创建一个`StackClass.py`文件,...

    数据结构栈的实现相关代码

    数组实现适用于已知最大元素数量的情况,而链表则更适合动态变化的大小。 1. 数组实现: 使用数组实现栈时,我们可以将数组的最后一个元素视为栈顶。当有新元素压入时,我们将它放到数组的末尾;弹出时,我们移除...

Global site tag (gtag.js) - Google Analytics