[問題] 可以在沒有new的情況下做delete嗎?

看板C_and_CPP作者時間14年前 (2012/01/10 14:43), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我建立了一個類別用以管理陣列,其中只有Create成員會動態配置一記憶體空間, 但我沒有辦法保證使用者一定會呼叫Create成員(比方說註解掉紅色的兩行),在這 個情況下如果解構MyArray就會變成沒有new但是delete了。 請問這樣是合理的嗎? 不然就要另外設一個flag來偵測Create有沒有被new過了。 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) class MyArray { public: ~MyArray(); void Create(int); int Get(int); void Put( int, int); private: int *Array; }; MyArray::~MyArray() { delete [] Array; return ; } void MyArray::Create(int Len) { Array = new int[Len]; return ; } int main() { MyArray NewArray; NewArray.Create(100); NewArray.Put(10, 0); return (0); } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.72.212.239

01/10 14:48, , 1F
在建構子中把 Array 設為 NULL 如何?
01/10 14:48, 1F

01/10 14:48, , 2F
沒記錯的話 delete 一個 NULL 不會出事
01/10 14:48, 2F

01/10 14:49, , 3F
或者如果你不放心的話這個 NULL 值可以做為你說的 flag 來用
01/10 14:49, 3F

01/10 14:55, , 4F
delete NULL 是安全的
01/10 14:55, 4F

01/10 16:40, , 5F
int* Array=NULL; if(Array!=NULL){ delete [] Array;}
01/10 16:40, 5F

01/10 16:42, , 6F
delete [] NULL; 和 delete NULL; 都是安全的
01/10 16:42, 6F

01/10 16:52, , 7F
Create: if(len>0){ Array=new[len];}else{ Array=NULL;}
01/10 16:52, 7F
文章代碼(AID): #1F2zt_l1 (C_and_CPP)