C++ Primer 5th笔记(chap 13 拷贝控制)交换操作
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 13 拷贝控制)交换操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 類對象的交換賦值
Hasptr.h
class Hasptr { public: Hasptr(const std::string &s = std::string()):ps(new std::string(s),i(0),use(new std::size_t(1))) {} Hasptr(const Hasptr &p):ps(p.ps),i(p.i),use(p.use){++*use}; Hasptr& operator=(const Hasptr&);~Hasptr(); private:std::string *ps;int i;std::size_t *use; }交換代碼為:
Hasptr temp = v1; //創建v1的一個臨時副本 v1 = v2; //將v2賦值給v1 v2 =temp; //將保存v1的值賦予v22. 優化
在上面的交換過程中,需要一次拷貝和兩次賦值,string的內存分配帶來了開銷, 更希望 swap 交換指針,而不是分配 string 的新副本:
string &temp = v1.ps; v1.ps = v2.ps; v2.ps = temp.ps;2. 1 可以在類上自定義一個版本的 swap,當交換兩個HasPtr對象時,只需要交換他們內部的指針即可:
class HasPtr{friend void swap(HasPtr &lhs,HasPtr &rhs); }inline swap(HasPtr&,HasPtr&) {using std::swap;swap(lhs.ps,rhs.ps); //交換指針,而不是string的數據swap(lhs.i;rhs.i); //交換int成員 }2. 2 賦值運算符中使用 swap
使用拷貝并交換的技術,這種技術將左側運算對象與右側運算對象的一個副本進行交換。
rhs 是按值傳遞的:
- 注:賦值運算符具備異常安全、且能正確處理自賦值。
【參考】
[1] 代碼referenceCountSwap.h
總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 13 拷贝控制)交换操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha