Re: [問題] function的{前加上:跟其他東西是甚麼意思

看板C_and_CPP作者 (我要加入劍道社!)時間15年前 (2010/02/03 05:16), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串3/3 (看更多)
※ 引述《QQ29 (我愛阿蓉)》之銘言:

02/03 09:43,
做 exception safe 的時候才會用到。先用 copy ctor 造一
02/03 09:43

02/03 09:43,
個 temp,再 swap 進去。
02/03 09:43

02/03 12:57,
是 opt = ( A &rhs){A temp(rhs)? 再來怎麼swap呢@@}
02/03 12:57
class Foo { public: Foo(const Foo&); Foo& operator= (const Foo& rhs); void swap(Foo& f) throw (); private: Bar* my_data1; Baz* my_data2; }; Foo& Foo::operator=(const Foo& rhs) { Foo tmp(rhs); swap(tmp); } void Foo::swap(Foo& f) throw () { swap(my_data1, f.my_data1); swap(my_data2, f.my_data2); } 要用 swap 的手法達成 exception safety 有一項條件是 swap 操作絕對不會丟出 exception 因此你的 member 通常只能使用 primitive type 或 pointer type 這樣在 swap 時才不會有 exception 產生 而複制過程中可能會產生 exception 的時間點 都集中在 tmp 這個暫時物件的 ctor 中 在呼叫 constructor 的過程中即使發生 exception compiler 也會保證它的資源會被釋放 (當然你的 constructor 要寫對) 而且會在 swap 執行前離開 operator=() 保證這個失敗的 copy-assignment 不會去修改到等號左邊那個物件的內容 要詳細解釋真的會長篇大論 建議你自己去看 exceptional c++ 裡面講得很清楚 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.29.108 ※ 編輯: littleshan 來自: 140.112.29.108 (02/03 13:17)

02/03 14:07, , 1F
要會用C++真的要讀好多書XD...
02/03 14:07, 1F

02/03 14:54, , 2F
真的學不完...不熟還被迫要學別的語言 搞得都不熟....
02/03 14:54, 2F

02/04 00:40, , 3F
l大 請教一下 這招是都可以適用嗎還是什麼時候才可以用?
02/04 00:40, 3F

02/04 00:43, , 4F
你需要 strong exception safety 的時候使用
02/04 00:43, 4F

02/04 00:45, , 5F
去看 exceptional c++ 它講得比我好 (無誤)
02/04 00:45, 5F

02/04 01:05, , 6F
雖然目前我看不懂exception不過 如果把這個當成習慣會不好嗎
02/04 01:05, 6F
文章代碼(AID): #1BQGQoAI (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BQGQoAI (C_and_CPP)