簡體   English   中英

動態地為課程分配內存

[英]dynamiclly allocate memory for class

我很清楚在C ++中為struct動態分配內存。

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

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

這是一張照片。

在此處輸入圖片說明

堆中分配了8個字節的內存,head是指向它的指針。

但是當我動態地為課堂分配內存時,一些問題困擾了我很久。 有一個例子:

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.取消引用普通函數和取消引用虛擬函數有什么區別?

首先, classstruct在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,請參見此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM