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

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

C++多繼承和釋放內(nèi)存

C++多繼承和釋放內(nèi)存

C++
Carmel_Evans 2019-02-19 15:36:34
#include <iostream>#include <string>using namespace std;class N{public: N() { cout<<"N()"<<endl; } ~N() { cout<<"~N()"<<endl; } void set_name() { name = "Jim"; } string get_name() { return name; }protected: string name; };class B:public N{public: B() { cout<<"B()"<<endl; } ~B() { cout<<"~B()"<<endl; }};class C:public B{public: C() { cout<<"C()"<<endl; } ~C() { cout<<"~C()"<<endl; }};void text(C *n){ n->set_name(); delete n; n = NULL; }int main (){ C c; text(&c); ? ? return 0;}看看這個(gè)代碼為什么運(yùn)行時(shí),調(diào)用了兩次析構(gòu)函數(shù)?而且視頻中老師是說(shuō)并不創(chuàng)建臨時(shí)變量的呀
查看完整描述

1 回答

已采納
?
onemoo

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

問(wèn)題出在 test 函數(shù)中的 delete 上。你不應(yīng)該 delete 的。


delete 一個(gè)指針會(huì)引起指針?biāo)笇?duì)象被析構(gòu),但前提是這個(gè)對(duì)象必須是被 new 出來(lái)的。 這個(gè) test 中的 c 所指的是 main 函數(shù)中的 c,它并不是用 new 構(gòu)造的,不應(yīng)該被 delete!

delete 了不正確的指針會(huì)引起什么后果呢? 不確定!? C++ 標(biāo)準(zhǔn)并沒(méi)有規(guī)定這時(shí)會(huì)發(fā)生什么。在有的平臺(tái)下可能看不出什么影響;有的平臺(tái)下可能會(huì)引起重復(fù)析構(gòu)(你遇到的很像這種)......甚至更嚴(yán)重的(更隱晦的)錯(cuò)誤。 總之,你知道這樣做是錯(cuò)的就好了。


題目中你提到“釋放內(nèi)存”。這里的 c 就是一個(gè)簡(jiǎn)單的局部變量,并不需要額外的操作來(lái)“釋放”它。當(dāng)它結(jié)束生存期時(shí)會(huì)被自動(dòng)釋放。? ?如果這個(gè) c 是被 new 出來(lái)的,才應(yīng)該主動(dòng) delete 掉。


另外,也許是你術(shù)語(yǔ)運(yùn)用得不對(duì)。你這里就是普通的“單繼承”,并不是“多繼承”。多繼承通常指的是子類(lèi)同時(shí)派生自多個(gè)父類(lèi)。

查看完整回答
1 反對(duì) 回復(fù) 2019-02-19
  • Carmel_Evans
    Carmel_Evans
    十分感謝您能回答我的問(wèn)題!術(shù)語(yǔ)確實(shí)錯(cuò)了,應(yīng)該是多重繼承。我現(xiàn)在知道哪里錯(cuò)了,謝謝!
  • 1 回答
  • 0 關(guān)注
  • 1073 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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