zoukankan      html  css  js  c++  java
  • 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这种形式访问。这像个类型会没所有实例对象共享。


  • 相关阅读:
    WebService又一个不爽的地方
    [biztalk笔记]1.Hello World!
    Flex4中使用HDividedBox,VDividedBox
    Flex:地图缩放平移效果(简易版)
    asp.net webform中submit按钮使用不当很容易犯的一个错误
    Silverlight Telerik控件学习:带CheckBox复选框的树形TreeView控件
    oracle odp.net 32位/64位版本的问题
    asmx迷10分钟升级成wcf熟手指南
    如何克制求知欲或好奇心
    随手小记:快速适应未必是个好策略
  • 原文地址:https://www.cnblogs.com/littleby/p/4984967.html
Copyright © 2011-2022 走看看