--
BCDFGIJKLNOPQRUVWXZ
--
Origin: [1;36m<洗屁屁小站> [1;32mcpp.m7.ntu.edu.tw [1;33m(140.112.250.100)
Welcome to CPP BBS [1;36m-- [1;31mFrom : [mpiaip [1;31m[ [m [1;31m] [m
--
[1;31mOrigin: [m [1;32m洗屁屁小站 [m [1;35mcpp.m7.ntu.edu.tw [1;33m140.112.250.100 [m
[1;33m洗屁屁小站的錢幣叫作屁屁, [1;36m所以來本站洗錢叫作洗屁屁。 [m
如果該 class 有 dtor 的話, 只有第一個 element 的 dtor 會被執行到
--
mailto:ijl...@csie.nctu.edu.tw?subject="send pgp key" to get my pgp public key
key finger print : FA 38 7E 91 FA 22 FA F6 63 04 E3 B5 A1 9F 0C CD
不知道誰寫的 self-produce program...
char*p="char*p=%c%s%c;main(){printf(p,34,p,34);}";main(){printf(p,34,p,34);}
--
※ Origin: 克萊恩大地 ◆ From: Terry.Dorm10.NCTU.edu.tw
--
只是不能把整個 new 出來的陣列歸還而已
所以delete是合法的,當然不是啥 warning 啊!
--
Origin: [1;36m<洗屁屁小站> [1;32mcpp.m7.ntu.edu.tw [1;33m(140.112.250.100)
Welcome to CPP BBS [1;36m-- [1;31mFrom : [mFrank [1;31m[ [mfrank.m7.ntu.edu.tw [1;31m] [m
>最近發現一件事...
>如果我有個 class A {}
>然後我用 A* pa=new A[30]; 後面很明顯我要用 delete[] pa 來刪除
>可是當我今天是 char *s=new char[30];
>後面我應該寫成 delete[] s 或 delete s?
>我發現好像我都寫成 delete s 了 (大概因為以前 free(char*)很常用吧)
>可是好像編譯器 -Wall 也沒有 warning 出來,...
>ㄟ 這樣有什麼危險嗎?
依照 C++ Standard 的規定, 這樣的行為是 undefined,
程式這樣寫可能沒有任何問題發生但也可能會有奇怪
的問題出現, 依你使用的 compiler 而定.
四眼的王蟲
會完全釋放
沒有執行 dtor 可能會遇到的問題是,
假設您在 ctor 或其他 function 中 new 記憶體, 在 dtor 中釋放記憶體
如果您用的是 delete , 則只會執行第一個 element 的 dtor
則只有第一個 element 所 new 的記憶體會被釋放, 其餘 element 會造成 memory leak
如果您用的是 delete[], 則會執行所有 element 的 dtor
--
mailto:ijl...@dragon2.net?subject="send pgp key" to get my pgp public key
不一定,不同的 compiler 可能會有不同的作法。
這一點在 C++ Standard 是 undefined。
--
Jiun-Yao Huang <mailto:jyh...@csie.nctu.edu.tw> Uni\/\/indows
Dep. of Comp. Sci. & Info. Eng., NCTU, Hsin-Chu, Taiwan, R.O.C. WW\/\/etworks
- - - - - - - - - - - - - - - - - - - - <http://www.csie.nctu.edu.tw/~jyhuang>
class JiunYaoHuang : public Hacker, protected Artist, private Vocalist {};