为班级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