看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
LPH66:在建構子中把 Array 設為 NULL 如何? 01/10 14:48
LPH66:沒記錯的話 delete 一個 NULL 不會出事 01/10 14:48
LPH66:或者如果你不放心的話這個 NULL 值可以做為你說的 flag 來用 01/10 14:49
littleshan:delete NULL 是安全的 01/10 14:55
johnhmj:int* Array=NULL; if(Array!=NULL){ delete [] Array;} 01/10 16:40
stimim:delete [] NULL; 和 delete NULL; 都是安全的 01/10 16:42
johnhmj:Create: if(len>0){ Array=new[len];}else{ Array=NULL;} 01/10 16:52