作者icetofux ()
看板C_and_CPP
標題[問題] 可以在沒有new的情況下做delete嗎?
時間Tue Jan 10 14:43:09 2012
開發平台(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