青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 13  文章 - 36  trackbacks - 0
<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(2)

隨筆檔案

友情鏈接

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

    這陣子不怎么忙,閑時把Effective c++,more Effective c++, Exceptional c++,more Exceptional c++在復習了下,根據c++ primer 中提到設計一個string 類型需要的功能,編了一個異常安全的string 類。類基于shared_ptr<char>實現,使用的是vc9的shared_ptr(發現vc9的shared_ptr的reset函數可能有問題,看boost的源碼,覺得boost的是沒有問題的。大家可以試試。),大家也可以使用boost的shared_ptr。一直都是關注大家的文章,今天終于寫下了自己的文章了。咱們博客有不少強人,希望大家提點建議。

1,頭文件: myString.h

myString.h


2,實現文件:myString.cpp

myString.cpp

 

3,測試代碼:

測試代碼

 

4,代碼打包地址:/Files/Alex-Lee/myString.rar 

posted on 2009-03-18 09:12 Alex-Lee 閱讀(1848) 評論(12)  編輯 收藏 引用

FeedBack:
# re: 自己實現的一個基于異常安全的string類 2009-03-18 10:40 wingfire
不得不說,這個實現糟糕的一塌糊涂。邏輯都不正確,談什么異常安全?  回復  更多評論
  
# re: 自己實現的一個基于異常安全的string類 2009-03-18 10:49 Alex-Lee
@wingfire

兄弟,能說清楚點嗎?有好的資料推薦下?  回復  更多評論
  
# re: 自己實現的一個基于異常安全的string類 2009-03-18 12:11 megax
這個實現沒有自己的內存管理,根本就無法使用棧上的字符串,shared_ptr的作用,作者還要好好看看。字符串一個很重要的內容就是內存管理,CopyOnWrite之類的技巧是必須的。  回復  更多評論
  
# re: 自己實現的一個基于異常安全的string類 2009-03-18 16:29 yindf
你這個實現太汗了

myString::myString(const char *cstr)
:data_(const_cast<char*>(cstr))
{
}

你這樣直接就把外面傳來的指針放到shared_ptr,如果我這么么構造:

myString("abc");

那靜態的字符串常量難道能被shared_ptr釋放掉。。。

BTW: 我只看了前面幾行,建議你再仔細看看,而且建議別說異常安全,異常安全好說難做,非常難。  回復  更多評論
  
# re: 自己實現的一個基于異常安全的string類 2009-03-18 20:35 陳梓瀚(vczh)
整個都是錯的,應當扔掉重寫。你自己也應當好好學習一下什么是C++才行。

1:字符串的char*要自己創建自己刪除,別人給你char*你也得復制內容而不是復制指針。
2:shared_ptr<char>不是給你放char數組而是char指針的。
3:equal比較兩個指針無意義。
4:速度起見,你應當總是維護一個int length而不是在length()里面strlen,因為length還有很多其他用處。
5:考慮引用計數。
6:功能太少。  回復  更多評論
  
# re: 自己實現的一個基于異常安全的string類 2009-03-18 20:36 陳梓瀚(vczh)
7:沒有看到任何跟異常安全有關的東西。  回復  更多評論
  
# re: 自己實現的一個基于異常安全的string類 2009-03-19 10:40 夢在天涯
此地高手多也!

大家的意見還是很好的!  回復  更多評論
  
# re: 自己實現的一個基于異常安全的string類 2009-03-19 12:31 null
@陳梓瀚(vczh)
equal比較兩個指針,還是有意義的  回復  更多評論
  
# re: 自己實現的一個基于異常安全的string類 2009-03-19 14:50 Alex-Lee
@yindf
@陳梓瀚(vczh)

首先謝謝大家給的意見,果然高手如云。再次拜服。
兩位意見不錯,特別是構造函數那個錯誤比較大。這個確實是疏忽了。Exceptional c++中的NewCopy函數可以借用解決這個問題。

另外,異常安全有三個等級,依次是無資源泄露,狀態一致,無異常拋出。一般能實現到狀態一致是很不錯了。
我談談自己設計的初衷。
1,像PIMP/COW實現太過復雜,啰嗦,不太喜歡。
2,使用shared_ptr是因為,智能指針本身就是為了防止原生指針資源泄露問題而設計的,這樣就達到了無資源泄露的基本保證。就不需要處理原始指針問題。
因此,我的設計就是保證狀態一致問題。也即是說,我設計這個類就是只要保證狀態一致即可。如果確實使用char*這樣的原生指針作為數據成員,那么這個類確實需要重新設計,這毋庸置疑。

3,equal()函數自己也有些疑惑,到底是只要兩個字符串的值相等就行還是需要指向的是同一塊字符串內存呢?或者myString對象本身就應該是同一個對象?4,關于維護length長度問題,由于使用shared_ptr實現,因此,就不需要維護 length成員。否則,如果使用shared_ptr與length,還需要維護兩者之間的一致。當然,如果使用原生指針char*而不是使用shared_ptr,那么提供length成員變量是應該。
5,由于使用shared_ptr,因此就不需要引用計數了。shared_ptr本身是引用計數的實現。myString封裝中沒有其他的成員,不涉及占過多內存的問題。


這篇文章的發表,確實是讓我學習到了不少東西,再次謝謝大家,希望大家多提意見,這樣才能快速成長。
  回復  更多評論
  
# re: 自己實現的一個基于異常安全的string類 2009-03-19 16:06 陳梓瀚(vczh)
@null
設計string的其中一個目的就是將char*封閉起來,獲得并操作char*的唯一辦法就是使用類似GetBuffer()的東西。因此equal的存在是不合理的。  回復  更多評論
  
# re: 自己實現的一個基于異常安全的string類 2009-03-19 16:08 陳梓瀚(vczh)
@Alex-Lee
1:shared_ptr使用delete而不是delete[]刪除你的東西。這是有問題的。所以你必須自己實現。
2:shared_ptr沒有copy-on-write,因為這是不可能的,所以你必須自己實現。
3:由于length的重要性,你必須寫test case來保證你維護了他們的一致性。  回復  更多評論
  
# re: 自己實現的一個基于異常安全的string類 2009-03-19 16:32 Alex-Lee
@陳梓瀚(vczh)

謝謝。shared_ptr使用delete的話,這樣操作數組確實是問題。因此,對于設計數組類型的安全類,不能選用shared_ptr這么處理,這樣看來,類設計時選用shared_ptr就是錯誤的。這樣,終于搞明白了,為什么開始有人說這個設計糟糕透頂了。這個設計確實是有問題的。這次,印象深刻,徹底糾正了思想上的錯誤。
  回復  更多評論
  

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              美腿丝袜亚洲色图| 欧美日韩高清在线一区| 免费在线观看一区二区| 久久精品国产亚洲精品| 午夜精品亚洲| 久久久不卡网国产精品一区| 久久九九免费视频| 欧美大片在线观看| 亚洲精品久久在线| 亚洲国产91色在线| 亚洲人成亚洲人成在线观看| 欧美a级片一区| 亚洲欧美日韩一区二区在线 | 国产精品久久久久久久浪潮网站 | 狠狠入ady亚洲精品经典电影| 香蕉久久久久久久av网站| 一区二区三区精品视频| 亚洲视频你懂的| 亚洲国产精品成人久久综合一区| 亚洲精品女av网站| 日韩午夜电影av| 亚洲欧美日本视频在线观看| 久久久天天操| 国产精品vip| 亚洲国产老妈| 亚洲一区二区三区午夜| 免费人成精品欧美精品| 亚洲综合视频网| 欧美精品成人一区二区在线观看| 国产精品一区久久久| 91久久精品国产| 午夜在线电影亚洲一区| 欧美韩日高清| 亚洲欧美日韩国产| 欧美另类综合| 亚洲第一区在线| 久久av在线| 日韩午夜激情| 美女脱光内衣内裤视频久久影院 | 91久久精品一区二区三区| 午夜精品久久久久影视 | 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美性猛交xxxx乱大交退制版| 91久久精品美女高潮| 久久精品综合网| 一区二区日韩伦理片| 久久综合久色欧美综合狠狠 | 亚洲精品久久久久中文字幕欢迎你 | 午夜精品福利一区二区三区av | 免费在线观看一区二区| 久久国产66| 久久久久久日产精品| 亚洲视频专区在线| 国产一区在线看| 国产精品狠色婷| 欧美日韩中文字幕日韩欧美| 欧美日韩国产精品专区| 欧美日韩在线视频首页| 亚洲黄色成人久久久| 亚洲国产91| 亚洲福利av| 在线电影欧美日韩一区二区私密| 欧美性猛交视频| 欧美午夜电影完整版| 免费在线成人| 欧美日本在线观看| 欧美电影免费观看网站 | 欧美在线视频免费| 亚洲国产精品va在线观看黑人| 亚洲黄色在线看| 亚洲大胆人体视频| 欧美在线3区| 亚洲欧美精品| 欧美中文字幕视频| 日韩视频精品| 亚洲免费在线观看视频| 久久人人九九| 免费在线观看成人av| 美女精品一区| 久久久999| 亚洲欧美国产视频| 国产精品美女久久久久久2018| 亚洲日韩欧美一区二区在线| 麻豆精品91| 91久久国产自产拍夜夜嗨 | 久久精品国产96久久久香蕉| 欧美夫妇交换俱乐部在线观看| 亚洲高清网站| 欧美一区二区三区日韩| 久久综合一区| 欧美一区二区三区在线观看| 国语自产精品视频在线看| 久久综合影音| 久久福利精品| 国产在线播精品第三| 美国成人直播| 久久精品国产69国产精品亚洲| 国产欧美一区视频| 在线午夜精品| 一区二区欧美日韩视频| 国产麻豆9l精品三级站| 欧美一级专区| 欧美影片第一页| 很黄很黄激情成人| 亚洲精品国产精品国自产在线| 欧美一区激情视频在线观看| 狠狠狠色丁香婷婷综合久久五月| 欧美激情中文字幕乱码免费| 国产精品一区亚洲| 欧美日韩国产色综合一二三四 | 午夜精品久久久久久久久久久久| 日韩图片一区| 亚洲东热激情| 欧美影院视频| 久久午夜av| 每日更新成人在线视频| 亚洲午夜在线观看| 亚洲综合丁香| 亚洲精品国产视频| 一区二区欧美激情| 国产精品亚洲综合色区韩国| 亚洲欧洲另类国产综合| 国内久久精品| 欧美在线视频播放| 久久精品国产亚洲aⅴ| 国产精品日韩一区二区| 久久久精品tv| 欧美激情一区二区三区在线视频| 国产一区二区黄| 久久手机精品视频| 亚洲一区二区三区久久 | 午夜亚洲福利在线老司机| 亚洲免费观看在线观看| 欧美三日本三级少妇三99| 欧美成人午夜免费视在线看片| 欧美精品在线视频观看| 欧美大片91| 国内精品写真在线观看| 欧美一区二区三区四区视频| 久久久999精品免费| 免费成人高清在线视频| 一区二区三区国产在线| 亚洲黄色一区二区三区| 欧美一区二区免费| 欧美激情精品久久久久久| 亚洲久久视频| 欧美午夜在线一二页| 亚洲剧情一区二区| 99综合在线| 久久九九有精品国产23| 国内精品久久久久伊人av| 久久蜜桃资源一区二区老牛| 亚洲精品久久久久久久久久久久| 久久精品亚洲精品| 久久精品国产精品| 国产精品主播| 免费看亚洲片| 久久激情网站| 亚洲女人天堂av| 欧美国产亚洲视频| 亚洲黄网站黄| 久久久综合网| 欧美日韩999| 欧美精品日韩一本| 另类图片国产| 亚洲伦理在线| 99综合精品| 亚洲一区二区三区免费在线观看| 亚洲在线国产日韩欧美| 久久永久免费| 欧美日韩亚洲高清| 国产欧美韩国高清| 亚洲国产精品久久久久久女王| 久久精品亚洲精品| 亚洲欧美国产一区二区三区| 欧美高清视频一二三区| 国产精品视频久久久| 一区二区国产在线观看| 今天的高清视频免费播放成人| 久久综合电影| 美女任你摸久久| 亚洲久久成人| 亚洲精品偷拍| 欧美国产日韩一区| 亚洲高清影视| 欧美午夜精彩| 久久国产主播| 久久久久久国产精品mv| 裸体一区二区三区| 一区二区日韩免费看| 欧美日韩美女| 久久综合五月天婷婷伊人| 欧美日本韩国| 亚洲激情图片小说视频| 极品av少妇一区二区| 免费一级欧美片在线播放| 伊人久久婷婷色综合98网| 亚洲黄色精品| 国产午夜精品理论片a级大结局| 亚洲毛片av|