關於C++的堆疊(stack)問題 |
答題得分者是:pwipwi
|
lu
高階會員 發表:11 回覆:189 積分:195 註冊:2003-11-19 發送簡訊給我 |
各位大大小弟有一個問題,找了好久,都找不到答案
void __fastcall TestFunctiom () { int AA; }在C語言中變數AA的實體位置是位於程式的堆疊(STACK)區,等TestFunctiom執行時由程式自動分配記憶體位置,執行完畢則歸還 但是,如果是下面的情形,其記憶體的位置為何? 在Button1Click 內的變數 TestObj1 的實體位置為何? 是在程式的堆疊區(stack)嗎? TestObj1內的陣列(FTestInt)的實體記憶體位置為何? 一樣是在程式的堆疊區(stack)嗎? 在Button1Click 內的變數 TestObj2 的實體位置為何? 是在程式的堆疊區(stack)嗎? TestObj2內的陣列(FTestInt)的實體記憶體位置為何? 一樣是在程式的堆疊區(stack)嗎? class TestObj { private: int FTestInt[100]; int * __fastcall GetTestInt() { return FTestInt; }; public: __property int * TestInt = {read=GetTestInt }; }; void __fastcall TForm1::Button1Click(TObject *Sender) { TestObj TestObj1; TestObj1.TestInt[0] = 0; } void __fastcall TForm1::Button2Click(TObject *Sender) { TestObj *TestObj2 = new TestObj; TestObj2->TestInt[0] = 0; delete TestObj2; }請各位大大為偶解惑一下... ========================= 大家一起快樂寫程式 |
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
引言: 各位大大小弟有一個問題,找了好久,都找不到答案 但是,如果是下面的情形,其記憶體的位置為何? 在Button1Click 內的變數 TestObj1 的實體位置為何? 是在程式的堆疊區(stack)嗎? TestObj1內的陣列(FTestInt)的實體記憶體位置為何? 一樣是在程式的堆疊區(stack)嗎? 在Button1Click 內的變數 TestObj2 的實體位置為何? 是在程式的堆疊區(stack)嗎? TestObj2內的陣列(FTestInt)的實體記憶體位置為何? 一樣是在程式的堆疊區(stack)嗎?以下是我個人的猜測.... 1.Stack 2.Stack 3.TestObj2本身是在Stack 4.Heapclass TestObj { private: int FTestInt[100]; int * __fastcall GetTestInt() { return FTestInt; }; public: __property int * TestInt = {read=GetTestInt }; }; void __fastcall TForm1::Button1Click(TObject *Sender) { TestObj TestObj1; TestObj1.TestInt[0] = 0; } void __fastcall TForm1::Button2Click(TObject *Sender) { TestObj *TestObj2 = new TestObj; TestObj2->TestInt[0] = 0; delete TestObj2; }請各位大大為偶解惑一下... ========================= 大家一起快樂寫程式 |
lu
高階會員 發表:11 回覆:189 積分:195 註冊:2003-11-19 發送簡訊給我 |
謝謝pwipwi的回答,偶想想應該也是這樣....
會這樣問只有一個原因,偶必須產生很多物件,而每個物件內都有一個struct,如下例
class A { private: struct AAA { int TestInt; char TestStr[100]; }Ud; public: __property int TestInt = { read=Ud.TestInt , write=Ud.Test.Int }; };偶擔心一旦產生過多,系統會出問題.... 但是又不想寫NEW,不為什麼...煩阿...new & delete 最重要的是不用動態產生話,偶可以向上面藍色這樣寫 如果用NEW的話,就不能像下面(紅色)這樣寫 class A { private: struct AAA { int TestInt; char TestStr[100]; } *Ud; public: __fastcall AAA() { Ud = new struct AAA; }; __fastcall ~AAA() { delete Ud ; }; __property int TestInt = { read=Ud->TestInt , write=Ud.Test->Int }; };不管怎麼樣,還是謝謝各位 ========================= 大家一起快樂寫程式 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |