看板 C_and_CPP 關於我們 聯絡資訊
原文恕刪.. #define LEN 200 class A{ public: int *Array; int len; public: inline int GetLen() { return len; } inline int* GetArray() { return Array; } A(int len = LEN) { Array = new int[len]; } ~A(){ if(Array!=NULL) delete [] Array; } A& operator=(const A& obj){ if(this==&obj) return *this; delete [] Array; Array = new int[obj.GetLen()]; memcpy(Array, obj.GetArray(), obj.GetLen()); return *this; } }; 我研讀了相關書籍.. 請問改成這種方式是否會有問題? -- 如果沒有明天 我想見你最後一面.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.142
loveme00835:可以是可以了, 不過你還需要 copy constructor 才能避 10/08 21:55
loveme00835:其他可能的錯誤, operator =也可以用 copy ctor來實作 10/08 21:55
loveme00835:(再搭配 swap), 因為當記憶體用量一大, 需要考慮到 : 10/08 21:56
loveme00835:如果 new 的時候擲出一個例外, 被賦值的物件也跟著被 10/08 21:57
loveme00835:破壞掉了, 這是有關exception safety的議題 10/08 21:58
tropical72:請問您指的是.. heap 用完所引發的例外嗎? 10/08 22:09
tropical72:(或許說是執行 new 時 fail 所引發的意外) 10/08 22:09
※ 編輯: tropical72 來自: 180.177.76.142 (10/08 22:20)
loveme00835:嗯嗯, 沒有足夠空間供配置的時候 10/08 22:33
purpose:love神真的有耐心,回答又詳盡 10/08 22:37
hilorrk:如果娶到像love大這樣的老婆就賺到了 10/08 22:48
loveme00835:.......... 10/08 22:58
tropical72:感謝love大詳細解說,這部份我會再找資料釐清觀念.謝謝 10/08 23:10
xatier:上面h大 XD 10/09 09:17