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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

私有的靜態(tài)成員指針指向一塊堆內(nèi)存,如何釋放這個堆內(nèi)存?

私有的靜態(tài)成員指針指向一塊堆內(nèi)存,如何釋放這個堆內(nèi)存?

慕桂英546537 2019-04-13 08:36:34
bruce@bruce-localhost~$cattest.cc#include#includeclassTest{public:staticvoidallocate(size_tn){ptr=(int*)::malloc(n);*ptr=4;}~Test(){std::cout
查看完整描述

2 回答

?
汪汪一只貓

TA貢獻1898條經(jīng)驗 獲得超8個贊

既然你專門寫了一個allocate來分配內(nèi)存,為什么不寫一個free來釋放內(nèi)存呢
cpp#include
#include
classTest
{
public:
staticvoidallocate(size_tn)
{
ptr=(int*)::malloc(n);
*ptr=4;
}
staticvoidfree(){
free(ptr);
}
private:
staticint*ptr;
};
int*Test::ptr=nullptr;
intmain()
{
Test::allocate(sizeof(int));
return0;
Test::free();
}
如果你想在析構(gòu)函數(shù)中釋放,也不是不可能,但是注意不要重復釋放,而且,如果沒有對象,就不會產(chǎn)生析構(gòu)。
cpp~Test()
{
std::cout<<"helloworld"<free(ptr);
ptr=nullptr;//<--注意這句
}
                            
查看完整回答
反對 回復 2019-04-13
?
BIG陽

TA貢獻1859條經(jīng)驗 獲得超6個贊

樓上使用兩個靜態(tài)函數(shù)實現(xiàn)了你要的東西,我推敲樓主的意思是否是想用析構(gòu)函數(shù)來自動釋放堆申請的內(nèi)存,
如果是這種場景,使用單例類可以滿足:
classTest
{
public:
//帶緩沖池的的內(nèi)存分配實現(xiàn)
char*allocate(size_tn)
{
if(NULL==m_ptrStart){
//簡單考慮最大申請1000,真實場景可使用鏈表來鏈接每一塊內(nèi)部申請的大內(nèi)存;
m_ptrStart=(char*)::malloc(1000);
m_ptrCur=m_prtStart;
}
char*ptr=m_ptrCur;
m_ptrCur+=n;
returnptr;
}
~Test(){
free(m_ptrStart);
m_ptrStart=NULL;
}
staticTest*getInstance()
{
if(NULL==s_pTest)
s_pTest=newTest();
returns_pTest;
}
private:
Test(){m_ptrStart=NULL;m_ptrCur=NULL;}
char*m_ptrStart;//內(nèi)存分配首地址
char*m_ptrCur;//當前未使用的內(nèi)存
staticTest*s_pTest;//單例
};
Test*Test::s_pTest=NULL;
使用:
char*p1=Test::getInstance()->allocate(4);
char*p2=Test::getInstance()->allocate(8);
p1/p2用完后不用釋放,單例析構(gòu)時釋放所有內(nèi)存;
                            
查看完整回答
反對 回復 2019-04-13
  • 2 回答
  • 0 關(guān)注
  • 303 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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