看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) dev c++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 在解構子裡面Fruit::~Fruit(){ delete color; } delete color這樣寫正確嗎~? 還是要寫成delete []color 我嘗試過好像兩種寫法都可以,本身是用dev c++ compile 不知道對不對, 除了dev c++外還有什麼IDE可以拿來寫C呢~? dev c++有些沒有include的東西都可以直接用很怪 VC++要正版的,有抓了eclipse,但是沒辦法compile 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) #include<iostream> using namespace std; class Fruit{ public: double weight; char *color; Fruit(double,char *); virtual ~Fruit(); }; Fruit::Fruit(double w,char *col){ weight=w; color=new char[strlen(col)+1]; strcpy(color,col); } Fruit::~Fruit(){ delete color; } class Apple:public Fruit{ public: char *variety; Apple(double,char*,char*); ~Apple(); }; Apple::Apple(double w,char* col,char *var):Fruit(w,col){ variety=new char[strlen(var)+1]; strcpy(variety,var); } Apple::~Apple(){delete variety;} int main(){ Fruit *basket[20]; int i; double weight=100.5; char color[128]="紅色"; char variety[128]="富士"; for(int i=0;i<20;i++) basket[i]=new Apple(weight,color,variety); for(int i=0;i<10;i++) delete basket[i]; for(int i=0;i<20;i++) cout<<basket[i]->color<<endl; system("pause"); return 0; } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.252.246.123
LPH66:觀念: new 來的就 delete, new[] 來的就 delete[] 03/18 20:32
masan22305:沒記錯的話,new[]出來的用delete是undefined behavior 03/19 08:56
masan22305:http://ppt.cc/kNE1 03/19 08:56
QQ29:之前問,其實沒差,起始位址給對就不會leak 03/20 10:22
linotwo:delete [] 會依序呼叫每個元素的解構子,delete 則不會 03/20 11:02