C++中无数据成员的类的对象占用内存大小

结论:

对于没有数据成员的对象,其内存单元也不是0,c++用一个内存单元来表示这个实例对象的存在。

如果有了数据或虚函数(虚析构函数),则相应的内存替代1标记自己的存在。

PS:以下代码均在win32控制台下运行。

e.g.1

class A
{
public:
    void fun()
    {
        cout<<"A"<<endl;
    }
};

void main()
{
    A a;
    cout<<sizeof(a)<<endl;
}

运行后输出1。

e.g.2

class A
{
public:
    virtual void fun()
    {
        cout<<"A"<<endl;
    }
};

void main()
{
    A a;
    cout<<sizeof(a)<<endl;
}

运行后输出4。

e.g.3

class A
{
public:
    void fun()
    {
        cout<<"A"<<endl;
    }
    virtual ~A()
    {
        //这是一个虚析构函数;
    }
};

void main()
{
    A a;
    cout<<sizeof(a)<<endl;
}

运行后输出4。

Mark一个虚函数表讲解的博文:C++虚函数表剖析

原文地址:https://www.cnblogs.com/Tang-tangt/p/9341952.html

时间: 2024-08-01 16:06:08

C++中无数据成员的类的对象占用内存大小的相关文章

java中的进程与线程及java对象的内存结构【转】

原文地址:http://rainforc.iteye.com/blog/2039501 1.实现线程的三种方式: 使用内核线程实现 内核线程(Kernel Thread, KLT)就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上.程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(Light Weight Process,LWP),轻量级进程就是我们通常意义上所讲的线程,由于每个轻量

编写Java应用程序。首先,定义一个时钟类——Clock,它包括三个int型 成员变量分别表示时、分、秒,一个构造方法用于对三个成员变量(时、分、秒) 进行初始化,还有一个成员方法show()用于显示时钟对象的时间。其次,再定义 一个主类——TestClass,在主类的main方法中创建多个时钟类的对象,使用这 些对象调用方法show()来显示时钟的时间。

package com.homework.zw; public class Clock { String hour; String minute; String second; Clock(String h,String m, String s) { hour=h; minute=m; second=s; } void show() { System.out.println("时间为:"+hour+"时"+minute+"分"+second+&q

定义一个时钟类——Clock,它包括三个int型 成员变量分别表示时、分、秒,一个构造方法用于对三个成员变量(时、分、秒) 进行初始化,还有一个成员方法show()用于显示时钟对象的时间。其次,再定义 一个主类——TestClass,在主类的main方法中创建多个时钟类的对象,使用这 些对象调用方法show()来显示时钟的时间

package java1; public class Clock { int hhh; int mmm; int sss; Clock(int h,int m,int s) { hhh=h; mmm=m; sss=s; } void show() { System.out.println(hhh+":"+mmm+":"+sss); } } Clock c1=new Clock(11,23,45); c1.show(); Clock c2=new Clock(12,

day4(继承、修饰符、方法的重写、super关键词、继承中的构造方法、object类、对象转型)

1.类的继承(extends)通过继承,子类自动拥有父类的所有成员(成员变量和成员发方法)一个子类只能有一个父类,一个父类可以派生多个子类 2.访问修饰符(private 默认 protected public )对于class的权限修饰只可以用public和defaultdefault只能被同一个包内部的类访问 3.方法的重写(override)在子类中可以根据需要对从父类中继承来的方法进行重写重写方法必须和被重写方法具有相同方法名称.参数列表和返回类型重写方法不能使用比被重写方法更严格的访问

JAVA学习(1):保证类的对象在内存中唯一

一.饿汉式 class Single { private static final Single s=new Single(); private Single(){} public static Single getInstance() { return s; } } 为什么方法是静态的:不能new对象却想调用类中方法,方法必然是静态的,静态方法只能调用静态成员,所以对象也是静态的. 为什么对象的访问修饰符是private,不能是public 吗?不能,如果访问修饰符是Public,则Singl

编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。

package shape; public class Shape { //定义成员变量 private double zhouchang; private double mianji; public double getZhouchang() { return zhouchang; } public void setZhouchang(double zhouchang) { this.zhouchang = zhouchang; } public double getMianji() { re

编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Stud

package com.homework.zw; //student类部分 public class Student { int stuNo; String name; int age; void output() { System.out.println("学号:"+stuNo); System.out.println("姓名:"+name); System.out.println("年龄:"+age); } } package com.hom

30.编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。

package zuoye8; public abstract class Shape { private double zhouchang ; private double mianji ; public Shape(double zhouchang, double mianji) { super(); this.zhouchang = zhouchang; this.mianji = mianji; } public Shape() { super(); } //抽象一个周长方法 publi

P4 类、对象、类成员简介

本节内容 类(class)是显示世界事物的模型. 现实中的一架飞机========================>>>抽象为程序世界中的类 类与对象的关系 对象也叫做实例,是类经过实例化得到的内存中的事宜 有些类不能被实例化,如数学,我们不能说一个数学 依照类,我们可以创建对象>>>这就是实例化 现实世界中常称对象,程序世界中常称实例,二者并无太大区别,常常混用,不用太纠结. 使用new操作符创建对象 △14:15开始编写程序>>>接下来我们自己动手