Re: [問題] function的{前加上:跟其他東西是甚麼意思
※ 引述《QQ29 (我愛阿蓉)》之銘言:
→
02/03 09:43,
02/03 09:43
→
02/03 09:43,
02/03 09:43
→
02/03 12:57,
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
02/03 14:07, 1F
推
02/03 14:54, , 2F
02/03 14:54, 2F
→
02/04 00:40, , 3F
02/04 00:40, 3F
→
02/04 00:43, , 4F
02/04 00:43, 4F
→
02/04 00:45, , 5F
02/04 00:45, 5F
推
02/04 01:05, , 6F
02/04 01:05, 6F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):