亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: happyness
打印 上一主題 下一主題

delete一個對象數(shù)組的問題,請大俠幫忙看看 [復(fù)制鏈接]

論壇徽章:
0
11 [報告]
發(fā)表于 2007-01-30 14:02 |只看該作者
所謂c++的切片問題就是這種情況,可以作為一個經(jīng)典案例.java就沒有這個問題.解決辦法就是把base擴展為和derived一樣的屬性和方法,不需要的方法改為virtual

論壇徽章:
0
12 [報告]
發(fā)表于 2007-01-30 19:00 |只看該作者

如果上面的有問題,就是編譯器的錯誤了。

上面的例子很好,這就是為什么我們需要將析構(gòu)函數(shù)定義為虛函數(shù)的原因。

樓主的例子很好,如果有錯,就是編譯器的問題了。

實際上,delete[] p和delete p 的區(qū)別僅僅是調(diào)用析構(gòu)函數(shù)的次數(shù)不一樣,
像你的例子中,兩者效果是一樣的。

如果類中有資源需要釋放,就必須用delete[] ,以便多次(2次)調(diào)用析構(gòu)函數(shù)。

delete p總能把對象本身的內(nèi)存釋放掉,因為分配時有記錄。

論壇徽章:
0
13 [報告]
發(fā)表于 2007-01-30 20:58 |只看該作者
呵呵,這個是因為在做數(shù)組析構(gòu)的時候,編譯器會對每個元素都做一次析構(gòu),由于代碼中寫的是基類的指針,因此,編譯器在計算每個元素的偏移的時候,是按照基類的大小來計算的。因此,第一個元素的析構(gòu)函數(shù)可以被正常調(diào)用,而第二個是不可以的,因為此時已經(jīng)指向了錯誤的內(nèi)存區(qū)域。如果基類大小和子類大小是一樣的,那么這段代碼就不會core掉。

總之,不要將動態(tài)的特性施行于數(shù)組之上。

論壇徽章:
0
14 [報告]
發(fā)表于 2007-03-14 09:53 |只看該作者
理解了more effective c++中說的就不會這樣寫代碼了

論壇徽章:
0
15 [報告]
發(fā)表于 2009-08-29 15:39 |只看該作者
原帖由 清湯掛面 于 2007-1-30 20:58 發(fā)表
呵呵,這個是因為在做數(shù)組析構(gòu)的時候,編譯器會對每個元素都做一次析構(gòu),由于代碼中寫的是基類的指針,因此,編譯器在計算每個元素的偏移的時候,是按照基類的大小來計算的。因此,第一個元素的析構(gòu)函數(shù)可以被正 ...


解釋得非常好!

論壇徽章:
0
16 [報告]
發(fā)表于 2011-12-31 14:33 |只看該作者
可以這樣刪除:
delete[] (Derived*)p;

改造兩個析構(gòu)函數(shù)
  1. virtual ~Base () {std::cout<<"~Base ()"<<std::endl;}

  2. virtual ~Derived () {std::cout<<"~Derived ()"<<std::endl;}
復(fù)制代碼
輸出結(jié)果如下:
  1. ~Derived ()
  2. ~Base ()
  3. ~Derived ()
  4. ~Base ()
復(fù)制代碼

論壇徽章:
0
17 [報告]
發(fā)表于 2012-08-20 09:33 |只看該作者
哎呦,我也用到了對象數(shù)組的問題,但是使用繼承類的不多,不過這個隱含問題不簡單啊

論壇徽章:
0
18 [報告]
發(fā)表于 2013-03-12 23:46 來自手機 |只看該作者
厲害,在此受教了^_^

論壇徽章:
36
子鼠
日期:2013-08-28 22:23:29黃金圣斗士
日期:2015-12-01 11:37:51程序設(shè)計版塊每日發(fā)帖之星
日期:2015-12-14 06:20:00CU十四周年紀念徽章
日期:2015-12-22 16:50:40IT運維版塊每日發(fā)帖之星
日期:2016-01-25 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之福建
日期:2016-04-07 11:25:2215-16賽季CBA聯(lián)賽之青島
日期:2016-04-29 18:02:5915-16賽季CBA聯(lián)賽之北控
日期:2016-06-20 17:38:50技術(shù)圖書徽章
日期:2016-07-19 13:54:03程序設(shè)計版塊每日發(fā)帖之星
日期:2016-08-21 06:20:00
19 [報告]
發(fā)表于 2013-03-13 09:25 |只看該作者
就應(yīng)該廢掉C++這種語言

開發(fā)者應(yīng)該專注于算法、結(jié)構(gòu)、實現(xiàn)

而想成為C++的高手,首要任務(wù)竟然是讓自己了解C++的數(shù)不清的坑,這通常要耗費大量時間

個人觀點,不喜勿噴,懶得爭吵

論壇徽章:
36
子鼠
日期:2013-08-28 22:23:29黃金圣斗士
日期:2015-12-01 11:37:51程序設(shè)計版塊每日發(fā)帖之星
日期:2015-12-14 06:20:00CU十四周年紀念徽章
日期:2015-12-22 16:50:40IT運維版塊每日發(fā)帖之星
日期:2016-01-25 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之福建
日期:2016-04-07 11:25:2215-16賽季CBA聯(lián)賽之青島
日期:2016-04-29 18:02:5915-16賽季CBA聯(lián)賽之北控
日期:2016-06-20 17:38:50技術(shù)圖書徽章
日期:2016-07-19 13:54:03程序設(shè)計版塊每日發(fā)帖之星
日期:2016-08-21 06:20:00
20 [報告]
發(fā)表于 2013-03-13 11:25 |只看該作者
回復(fù) 15# xinxin12375


are you sure?

那只是對一種編譯器行為的解釋,語言規(guī)范中說通過一個基類指針來刪除一個含有派生類對象的數(shù)組,結(jié)果將是不確定的,
我用VC就沒掛,也就是說編譯器廠商的實現(xiàn)是不一樣的

所以13樓的回答中最可取的就一句:總之,不要將動態(tài)的特性施行于數(shù)組之上。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP