第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

棧中分配內(nèi)存和堆中分配內(nèi)存有什么講究?

棧中分配內(nèi)存和堆中分配內(nèi)存有什么講究?

C C++
風(fēng)嵐醉 2017-06-13 20:33:04
給對(duì)象申請(qǐng)內(nèi)存可以分配到棧里,也可以分配到堆里,那么什么情況下分配到棧里,什么情況下分配到堆?
查看完整描述

2 回答

已采納
?
onemoo

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

就像我在第一段中說(shuō)的:

Coordinate *p = new Coordinate(); 就是用 new 在堆中構(gòu)造了一個(gè)對(duì)象,返回其指針給 p,這樣你可以通過(guò) p 使用這個(gè)構(gòu)造出的對(duì)象。

而 Coordinate coor; 這樣就是很普通的定義了一個(gè)對(duì)象?。ê?int a 什么的沒(méi)區(qū)別呀),當(dāng)然一般這個(gè)對(duì)象是在棧中。?


初學(xué)時(shí)不用太考慮對(duì)象是在“堆”中還是在“?!敝?,你更應(yīng)該考慮的是:函數(shù)的本地變量(或者說(shuō)棧中的對(duì)象)會(huì)隨著函數(shù)的退出而銷毀。而new出來(lái)的對(duì)象則需要你手動(dòng)delete(或者說(shuō)是要求你手動(dòng)控制其生存期)。


那么如果你只是需要一個(gè)變量,就普通的定義一個(gè)好了,比如 int a; ? Coordinate coor; 之類的。?

但如果你不確定會(huì)使用幾個(gè)對(duì)象,那么你可以用 new 在運(yùn)行時(shí)實(shí)例化所需數(shù)量的對(duì)象。 又或者你需要一個(gè)對(duì)象在多個(gè)函數(shù)間傳遞,或者需要一個(gè)對(duì)象不隨函數(shù)退出而銷毀(需要后續(xù)使用到它),那你就得手動(dòng)控制其生存期,也就是要new一個(gè),等后續(xù)不需要時(shí)再delete掉。


總之可能你現(xiàn)在初學(xué)沒(méi)經(jīng)驗(yàn),等你用得多了自然就知道什么時(shí)候該用 new 了。如果你現(xiàn)在還略搞不清楚,那么也不必鉆牛角尖,到時(shí)候你就明白了。


另外提一下(你現(xiàn)在看不懂就別管了):手動(dòng)管理內(nèi)存在有的情況下可能會(huì)很復(fù)雜。有時(shí)候根本很難搞清一個(gè)對(duì)象是在哪里 new 出來(lái)的,又該由哪個(gè)函數(shù)負(fù)責(zé) delete 掉…… ?其實(shí)很多內(nèi)存泄漏問(wèn)題都是由此引起的。 ?后面你會(huì)學(xué)到 C++ 的智能指針,到時(shí)候你關(guān)注一下,這是很好的東西(總有人說(shuō)它們不好,其實(shí)不然),在 C++ 中你該學(xué)會(huì)活用智能指針。

查看完整回答
反對(duì) 回復(fù) 2017-06-16
?
onemoo

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

一般說(shuō)“分配內(nèi)存”都是指在堆中分配??茨阍?C 和 C++ 區(qū)中都問(wèn)了這個(gè)問(wèn)題,在 C 語(yǔ)言中,用 malloc 之類的庫(kù)函數(shù)所分配的內(nèi)存就在堆中。C++ 中用 new 創(chuàng)建的對(duì)象也在堆中,當(dāng)然也可以使用從 C 中繼承而來(lái)的 std::malloc 之類的。


函數(shù)中所有的本地變量,都是在棧中的。所以在棧中創(chuàng)建對(duì)象、分配內(nèi)存并不需要特殊的語(yǔ)法,你一般使用的變量都是在棧中。也就是說(shuō)一般沒(méi)有“在棧中分配內(nèi)存”這樣的說(shuō)法。


以上是最通常的用法。不過(guò)呢,C++ 中還有一類被稱為 placement new 的 new 用法,它可以在你指定的內(nèi)存處構(gòu)造對(duì)象,所以如果你向其傳入棧中的地址,是可以在棧中構(gòu)造對(duì)象的。即便是這樣,我覺(jué)得這也應(yīng)該叫作“在棧中構(gòu)造對(duì)象”而非“在棧中分配內(nèi)存”。 而且絕大多數(shù)情況下無(wú)需這樣做。

查看完整回答
反對(duì) 回復(fù) 2017-06-14
  • 風(fēng)嵐醉
    風(fēng)嵐醉
    在C++那個(gè)視頻里面,實(shí)例化對(duì)象提供了兩種寫法。一個(gè)是用Coordinate *p = new Coordinate();,還有一個(gè)是Coordinate coor; 這兩種寫法的應(yīng)用場(chǎng)合有什么講究嗎。
  • onemoo
    onemoo
    這里寫不開(kāi),另給你寫了個(gè)回答
  • 2 回答
  • 1 關(guān)注
  • 1719 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)