關於用new來建立物件例項的生存期問題

時間 2022-05-29 09:15:04

1樓:

你的程式 沒完整。 temp 是全域性 a* temp吧

"nihao!!!" 是 個字串常量。

存放 在靜態資料區。

當 hello 呼叫的時候, char* b 指向 "nihao",的位置 , a.a 賦值,也指向 b, 也就是 "nihao" 位置,

temp 取 a 的 地址, temp 指向。。

這裡 是 hello 退出, a a , 生命週期 退出, 但是 a及其資料部分 不一定會銷燬, 所以 temp 依然 指向 原來的 a 的位置。。a.a 指標的 值沒有改變。

所以 temp->a 依然有效。。

至於 a及其資料部分 為什麼不一定會改變。。

main 函式 在 高資料棧 位置,呼叫 hello 會到 低 棧位 去。。在回來的時候,在 回到 高棧 位置。。。 因此 編譯器 一般不 會 管 hello 棧中的資料, 所以不會消除, 但是 如果 你在

hello("nihao!!!!");

pii(); //任意 有資料的函式, 這個就會 到低 棧位 分配資料,temp->a 的資料就會改變。。 呼叫 就會出錯。。

cout

2樓:匿名使用者

作業系統以4k一頁來管理記憶體,為了效率,一般會是在當整頁的記憶體都不在使用的時候或是有新記憶體申請的**,而不是立即**,棧變數和堆變數都一樣。此外可能還跟編譯器有關

***********************************

算了,寫詳細點吧,也是最近看一本書上提到的首先,程序裡的記憶體地址都虛擬記憶體地址,非實體記憶體地址。win32虛擬記憶體管理器使用一個資料結構來記錄和維護每個程序的4g虛擬地址空間的使用及狀態資訊,這就是虛擬地址描述符樹(virtual address descriptor,vad)。每一個程序都有自己的vad集合,這個集合中的vad被組織成一個自平衡二叉樹,以提高查詢效率。

只有預留或提交(提交到實體記憶體)的記憶體塊才會有vad,自由的記憶體塊沒有vad,因此不在vad中的虛擬地址就是自由的。臨時變數在用的時候肯定是在vad樹中有描述的,在退出作用域後,自然這塊記憶體就是自由的了,但是vad不是立即更新的,因為注重效率,記憶體是以4k一頁的方式來管理,只有在「有新的記憶體申請或是有某個原來使用中的頁全部記憶體都是自由」的時候才會更新vad。所以才會造成這種本應該是」記憶體不可讀「卻執行正確的現象存在。

3樓:林聲飄揚

#include

using namespace std;

class a

;a *hello(char *b)

void main()

這時我修改的,不知是否符合題意

用自己的一生來換取家人的幸福,划算嗎

歲月安瀾的 我想先問你,你的眼中 愛情是怎麼樣的呢?不愛他就不必委屈自己。難道他對你的家人好就必須愛他?實際上,如果你能找到你心中真正喜歡的 自己有感覺的人。我想,你自己愛的人不會對你的家人不好的,也就是說,兩情相悅,雙方肯定也會愛對方的親人的。所以不必因為他對你家人的好而強迫自己愛上他。雖然他的狀...

琅琅的唱片,用一生來愛你這首歌曲的歌詞是什麼

看史論今 歌詞如下 無法忘記那些曾經 多少從容多少感動 因為有你在我生命 一切變的與眾不同 只怪那瞬間的傷痛 讓你對我無法寬容 忘記吧就當一場夢 期待再次深情相擁 我會用一生去愛你 卻不知道你在 只要幸福能夠出現 不管未來多苦多難 我會用一生去愛你 為你付出所有我也願意 只要生命再次相遇 隨時願意為...

關於電動車電池用逆變器的重大問題,明白人來

你好!統一電池德利達蓄電池商行黎工回答問題!如果你是用整組電動車電池同時放電,對電池是沒有影響的,就是要求你的逆變器要和電池的電壓匹配。不要什麼演算法,你帶得起來,電池幾下就報廢了。因為放電速度過快。500w的電器加上逆變器,大約功率在600w,48v的電池,放電得12安,你電池最好在10個小時的放...