STL中的智能指針:auto_ptr(deprecated)儿惫,unique_ptr,shared_ptr伸但,weak_ptr肾请,基礎內(nèi)容,不需贅述
實現(xiàn)一個智能指針更胖,有多少需要注意的地方铛铁?
(1)既然是“指針”,當然要實現(xiàn)解引用操作符函喉、箭頭操作符(weak_ptr例外)避归;
(2)實現(xiàn)bool操作符,以便于以if(xxx)的形式判斷有效性管呵;
explicit operator bool() const
(3)構造函數(shù)梳毙,注意explicit;
(4)是否需要拷貝構造函數(shù)捐下,是否需要右值引用账锹;
(5)是否需要=操作符,要判斷是否為自己坷襟;
(6)get奸柬,reset方法;
(7)weak_ptr有l(wèi)ock()方法婴程,返回一個shared_ptr廓奕;
(8)類型轉換,static_pointer_cast等档叔;
(9)引用計數(shù)的實現(xiàn)方法桌粉,由于智能指針可以多次復制,為了后面的復制操作能讓之前的指針的引用計數(shù)一直變化衙四,所以這個要怎么實現(xiàn)呢铃肯;
auto_ptr不能做容器元素,因為拷貝時會引起所有權變更传蹈,使原指針失效押逼,容易引起問題(事實上因為這個特性,不建議使用auto_ptr惦界,用unique_ptr代替)挑格;
STL中的智能指針均不保證線程安全,提供與基礎類型一致的線程安全性(可多線程同時讀同一元素沾歪,多線程同時寫不同元素恕齐,其他操作情況結果為未定義);