2017-06-22 74 views
-5

我在基礎C++編程的夜校學習,我有一些問題需要修改,對我來說沒什麼意義,我的意思是我認爲我知道答案,但我會喜歡由這裏的人和專家來運行,以獲得良好的理解,我嘗試通過谷歌尋找特定的答案,但很難找到。如何在C++內存管理中管理類 - 研究

以下代碼如何在C++內存管理中管理不同變量(* mystring,msize,x,y, * px,new int)?

class myclass 
{ 
public: 
char *mystring = 「thestring」; 
int msize = 200; 
int myfunc(int x) 
{ 
int y = 20; 
x = x + y; 
return x * y; 
} 
int main(void) 
{ 
int *px = new int; 
cin >> x; 
cout << myfunc(x); 
delete px; 
} 
} 

現在假設,當一個類在內存中實例化,因爲開始和結束的內存位置,它在聲明中代碼的順序創建值的副本,所以我猜的char *得到某種指針。

int msize將在之後,並將是一個8位值,其後的地址。

但我假設函數在類中調用?

+1

我無法真正弄清楚你在問什麼,但是如果你問的是如何將所有的變量放在內存中,答案是C++標準沒有強制任何特定的佈局。這完全取決於編譯器,不同的符合C++編譯器可能會在內存中完全不同。事實上,根據許多因素(優化,目標架構等),相同的編譯器可能會有不同的結果,因此如果沒有引用特定的編譯器和命令行選項,您可能希望得到的最佳答案是「它依靠。」 – cdhowie

+0

你有免費的功能,爲什麼他們會在任何課堂被叫? (在這段代碼中沒有一個類) – UnholySheep

+0

@cdhowie你看到我認爲這個問題本身是模糊的,我不太清楚我在內存管理中如何管理它。 –

回答

-1

這裏是你的意思的代碼我最好的猜測:

#include <iostream> 

using namespace std;  

char *mystring = "thestring"; // extremely dangerous type mismatch, don't do this 
int msize = 200; 

int myfunc(int x) 
{ 
    int y = 20; 

    x = x + y; 

    return x * y; 
} 

int main(void) 
{ 
    int *px = new int; 

    cin >> *px; 
    cout << myfunc(*px); 
    delete px; 

    return 0; 
} 

變量「MyString的」和「MSIZE」是全局變量,其內存編譯器靜態地分配。這些變量在整個程序運行期間都存在,通常可以通過程序的任何部分的名稱來訪問。

'x'和'y'是函數'myfunc'的局部變量。它們存在並且只能在對該函數的每次調用中按名稱訪問。

'px'是函數'main'的局部變量。 'main'在這方面有些特別,通常它是程序的入口點,當它返回時,程序退出。所以,'px的生命週期本質上是在程序期間,儘管它只能在'main'函數中被這個名稱訪問。

'new int'爲int顯式動態分配內存,然後這個int可用,直到通過匹配的顯式調用刪除它爲止。

典型情況下,當線程進入和退出變量的作用域(同時也調用構造函數和析構函數)時,局部變量的內存被壓入(並彈出)正在運行的線程的堆棧。動態分配的內存最終通過調用C++中的new和delete(或者malloc和C中的free)來爲每個變量顯式管理。