看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2005 with C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NULL 問題(Question): 1. 這個class有什麼問題? 2. 提出4種不同的解決方法 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) Typedef<typename T> Class Array { public: Array(unsigned arraySize): Data(0), size(arraySize) { if(size > 0)Data = new T[size]; } ~Array() { delete []Data; } Void setData(int i, T temp) { Data[i] = temp; } T getData(int i)const { return Data[i]; } private: unsigned size; T *Data; }; 補充說明(Supplement): 我知道這個問題對各位來說很基本, 但原PO對class的東西完全是個newbie @@ 原PO不是學生族, 所以這問題不是作業也不是考試題目之類的, 單純就一個對class外行的人想初學, 懇請各位大大鞭小力點, 並惠予賜教, 感恩!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.32.35 ※ 編輯: theone777 來自: 122.117.32.35 (02/08 16:36)
EdisonX:第一行就打錯了. 話說幹嘛堅持要四種不同解決方案 02/08 17:29
cgcheng:這個class感覺很怪 02/08 17:58
CumCumCum:unsigned int? 而且存取和解構都不檢查 指標T 02/08 18:10
CumCumCum:應該也要檢查 欲存取的元素是否超過上限 02/08 18:11
EdisonX:1. ~Array() delete 前需判斷 size > 0 是否成立。 02/08 19:06
EdisonX:2. 這種 class 一定要複載 operator = ,不然做 assigned 02/08 19:06
EdisonX: 後 , 解構時一定會死 (對 Data 釋放兩次)。 02/08 19:06
EdisonX:3. 因為有 operator = ,所以還要再做 02/08 19:06
EdisonX: Array(const Array & rhs); 建構子 02/08 19:06
EdisonX:4. setData, getData 都沒檢查邊界 02/08 19:07
EdisonX:5. new 失敗之情況沒處理,要處理好的話大概不是現在學的 02/08 19:07
littleshan:delete null pointer 是安全的 02/09 14:17
littleshan:new失敗的情況下,在這個例子中安全,因為ctor沒跑完 02/09 14:17
littleshan:視為物件未產生,因此不會去跑dtor 02/09 14:18
littleshan:不過在operator=與copy ctor之中就沒那麼單純了 02/09 14:19