Re: [問題] overload operator=

看板C_and_CPP作者 (藍影)時間13年前 (2010/10/08 21:48), 編輯推噓4(409)
留言13則, 5人參與, 最新討論串3/3 (看更多)
原文恕刪.. #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

10/08 21:55, , 1F
可以是可以了, 不過你還需要 copy constructor 才能避
10/08 21:55, 1F

10/08 21:55, , 2F
其他可能的錯誤, operator =也可以用 copy ctor來實作
10/08 21:55, 2F

10/08 21:56, , 3F
(再搭配 swap), 因為當記憶體用量一大, 需要考慮到 :
10/08 21:56, 3F

10/08 21:57, , 4F
如果 new 的時候擲出一個例外, 被賦值的物件也跟著被
10/08 21:57, 4F

10/08 21:58, , 5F
破壞掉了, 這是有關exception safety的議題
10/08 21:58, 5F

10/08 22:09, , 6F
請問您指的是.. heap 用完所引發的例外嗎?
10/08 22:09, 6F

10/08 22:09, , 7F
(或許說是執行 new 時 fail 所引發的意外)
10/08 22:09, 7F
※ 編輯: tropical72 來自: 180.177.76.142 (10/08 22:20)

10/08 22:33, , 8F
嗯嗯, 沒有足夠空間供配置的時候
10/08 22:33, 8F

10/08 22:37, , 9F
love神真的有耐心,回答又詳盡
10/08 22:37, 9F

10/08 22:48, , 10F
如果娶到像love大這樣的老婆就賺到了
10/08 22:48, 10F

10/08 22:58, , 11F
..........
10/08 22:58, 11F

10/08 23:10, , 12F
感謝love大詳細解說,這部份我會再找資料釐清觀念.謝謝
10/08 23:10, 12F

10/09 09:17, , 13F
上面h大 XD
10/09 09:17, 13F
文章代碼(AID): #1Cho4Wsd (C_and_CPP)
文章代碼(AID): #1Cho4Wsd (C_and_CPP)