• c++嵌套类-内存分配


    首先看下列代码:
    int main(){
        double *p;
        printf("sizeof(int):%d sizeof(double):%d sizeof(ptr):%d ", sizeof(int), sizeof(double),sizeof(p));

        getchar();
        return 0;
    }
    结果为:

    我是在64位机器上运行的,可以看到,int类型分配4字节,double类型8字节,指针4字节。
    /**********************/
    再看如下代码:
    /*****************空类****************/
    #include <iostream>
    class A{
    };
    int main(){
        A a;
        printf("sizeof(A)%d sizeof(a)%d ", sizeof(A),sizeof(a));
        getchar();
        return 0;
    }
    结果为:


    /***********类中有int类型,,***********/
    class A{
        int n;
    };


    /*******有指针********/
    class A{
        int *n;
    };


    /*******有函数*******/
    class A{
        void fun(){}
    };

    /******枚举类型****/
    class A{
        enum
        {white =1};
    };


    那么嵌套类是怎样的呢
    class A{
    public :
        class B{
            int n;
            int *p;
        };
    };
    结果任然是


    这说明嵌套类不是以指针的方式存储的。
    但如果这样写:
    class A{
    public :
        class B{
            int n;
            int *p;
        };
        B b;
    };

    你会发现他刚好等于B的大小但是这是有区别的。class B是类的定义部分完全可以写成这样
    class A{
    public :
        class B;

        B *b;//没有定以前只能声明引用或指针
    };
    class A::B{
        int n;
        int *p;
    };
    结果为

    这是大小恰是指针的大小
    而B b创建类的实实例才会将B中的类型分配空间,后者已经不叫嵌套类而叫做包含类。
    所以但在存储空间上讲嵌套类不会和实例变量存储在一起,而是像枚举类型,函数一样被存储的在其他地方,甚至连指针也不算。
    存储效果和下面一样,不同的是访问的层次关系变了。
    class B{
        int n;
        int *p;
    };
    class A{
    public :
        B b;
    };

    当嵌套类和枚举被定义在public部分是
    可以在外部用A::B这种形式访问。这像个类型会没所有实例对象共享。


  • 相关阅读:
    JavaWeb 输出九九乘法表,三角形,菱形
    模拟ATM机将输入的数据插入数据库
    JDBC连接数据库
    执行动态语句
    python深拷贝和浅拷贝
    redis数据库操作
    pymysql数据库操作
    linux 从Python 2.7升级至Python3.6.1
    模块---常用模块
    模块---安装模块
  • 原文地址:https://www.cnblogs.com/littleby/p/4984967.html
Copyright © 2020-2023  润新知