[導(dǎo)入]Exception C++ 之 16
- 如果需要的話,請(qǐng)編寫一個(gè)私有函數(shù)來(lái)使拷貝操作和拷貝賦值共享代碼;千萬(wàn)不要利用“使用顯式的析構(gòu)函數(shù)并且后面跟一個(gè) placement new”的方法來(lái)達(dá)到“以拷貝構(gòu)造操作實(shí)現(xiàn)拷貝賦值操作”這樣的目的。也就是說(shuō),決不要編寫如下的代碼:
T& T::operator=(const T &other)
{
if(this != &other)
{
this->~T(); // 有害!
new (this) T(other); // 有害!
}
return *this;
} - 關(guān)于拷貝賦值操作符有兩點(diǎn)需要注意:
- 將拷貝賦值操作聲明為“T& T::operator=(const T&)”
- 不要返回 const T&,盡管這樣做避免了諸如“(a = b) = c”的用法;這樣做意味著:你無(wú)法出于移植性的考慮而將 T 對(duì)象放入標(biāo)準(zhǔn)程序庫(kù)之容器 -- 因?yàn)槠湫枰x值操作返回一個(gè)單純的 T&。
文章來(lái)源:http://my.donews.com/robinchow/2007/01/14/uufhhtovwfvygicxibjufbugcnhamivhcapk/
posted on 2007-10-23 20:49 Robin Chow 閱讀(57) 評(píng)論(0) 編輯 收藏 引用