[英]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.取消引用普通函數和取消引用虛擬函數有什么區別?
首先, 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,請參見此處
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.