exceptional C++ Item4-5

來源:互聯網
上載者:User

模板成員函數,嗯,是一個和我有距離的概念。。。

我寫出來的答案和錯誤的答案幾乎一樣。。。汗一個。。。

貼上正確的代碼吧,認真學習一下:

// A strongly exception-safe version: //template<typename T, size_t size>class fixed_vector{public:  typedef T*       iterator;  typedef const T* const_iterator;  fixed_vector() : v_( new T[size] ) { }  ~fixed_vector() { delete[] v_; }  template<typename O, size_t osize>//再次定義一個不同的模板類型能夠讓其更通用  fixed_vector( const fixed_vector<O,osize>& other )    : v_( new T[size] )    { try {copy(other.begin(),other.begin()+min(size,osize),//使用try catch結構保證穩定性               begin());}      catch(...) { delete[] v_; throw; }}  fixed_vector( const fixed_vector<T,size>& other )    : v_( new T[size] )    { try {copy(other.begin(), other.end(), begin());}      catch(...) { delete[] v_; throw; }}  void Swap( fixed_vector<T,size>& other ) throw()  {    swap( v_, other.v_ );  }  template<typename O, size_t osize>  fixed_vector<T,size>& operator=(    const fixed_vector<O,osize>& other )//同上,採用新的模板類型來增加通用性  {    fixed_vector<T,size> temp( other ); // does all the work    Swap( temp ); return *this;         // this can't throw  }  fixed_vector<T,size>& operator=(    const fixed_vector<T,size>& other ) {//為啥要兩個拷貝賦值函數呢。。。模板不能特化?    fixed_vector<T,size> temp( other ); // does all the work    Swap( temp ); return *this;         // this can't throw  }  iterator       begin()       { return v_; }  iterator       end()         { return v_+size; }  const_iterator begin() const { return v_; }  const_iterator end()   const { return v_+size; }private:  T* v_;};

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.