为班级dynamiclly分配内存

我很清楚为C ++中的struct动态分配内存。

struct Node
{
    int item;
    struct Node *next;
};

int main()
{
    struct Node *head = new struct Node;
    return 0;
}

这是一张照片。

有8个字节的内存分配在堆中,头是一个指向它的指针。

但是当我在课堂上为dynamiclly分配内存时,有几个问题长期困扰着我。 有一个例子:

class Example
{
private:
    int a;
    double b;
public:
    virtual void fun();
    void fun2();
};

int main()
{
    Example *e = new Example;
}

void Example::fun()
{
}

我的问题是:

1.我知道系统为int分配内存,在堆中分配double,系统是否也为堆中的fun()和fun2()分配内存? 如果不是,fun()和fun2()存储在应用程序内存中的哪里?

2.堆中分配了多少字节?

3.指针e如何解引用函数fun()或fun2()?

4.取消引用正常功能和取消引用虚拟功能有什么区别?


首先,一个class和一个struct在C ++中是等价的,唯一的区别是默认的访问修饰符是public的一个结构和private的类。 而一个struct Node的数据类型只是Node ,所以Node *head = new Node; 就足够了,不需要到处重复struct

1.我知道系统为int分配内存,在堆中分配double,系统是否也为堆中的fun()和fun2()分配内存? 如果不是,fun()和fun2()存储在应用程序内存中的哪里?

这些方法与所有其他函数一起驻留在代码块中。 该方法源代码只有一个副本,而不是每个实例的副本。

2.堆中分配了多少字节?

这取决于填充和对齐。 sizeof(Example)告诉你,这个类需要多少个字节。

3.指针e如何解引用函数fun()或fun2()?

这取决于该方法是否是虚拟方法。 如果不是,它只是编译好像它是一个常规函数,除了指向this的指针也被传递(如果我没有错误,在寄存器中)。

对于虚拟功能和#4请看这里

链接地址: http://www.djcxy.com/p/14077.html

上一篇: dynamiclly allocate memory for class

下一篇: where is memory allocated for pointers and their data?