精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

因?yàn)檫@7個(gè)C++的坑,整個(gè)團(tuán)隊(duì)加班一星期

開發(fā) 后端
近期我們團(tuán)隊(duì)進(jìn)行版本質(zhì)量加固時(shí),踩到了一些比較隱晦的C++的坑,特總結(jié)分享在此,供大家參考。

 近期我們團(tuán)隊(duì)進(jìn)行版本質(zhì)量加固時(shí),踩到了一些比較隱晦的C++的坑,特總結(jié)分享在此,供大家參考。

1. string的字符串拼接,導(dǎo)致coredump

該問題的核心點(diǎn)在于第9行,竟然是可以編譯通過,其原因是x+"-",會(huì)被轉(zhuǎn)成char*,然后與to_string疊加導(dǎo)致BUG。

2. map的迭代器刪除

map要?jiǎng)h除一個(gè)元素,通常通過erase()函數(shù)來完成,但是要注意,如果我們傳入了一個(gè)iterator作為erase的參數(shù)來刪除當(dāng)前迭代器所指向的元素,刪除完成后iterator會(huì)失效,產(chǎn)生未定義行為。

正確的使用方法應(yīng)該是接收erase()的返回值,讓iterator指向被刪除元素的下一個(gè)元素或者end()。 

  1. for  ( auto  iter = m.begin(); iter != m.end(); iter++) {  
  2.   if  (...)  
  3.   iter = m.erase(iter);  
  4.   } 

但是上述代碼仍然有錯(cuò)誤,因?yàn)槿绻|發(fā)了刪除,那么iter再下一輪循環(huán)時(shí)會(huì)指向下下個(gè)元素,所以正確的寫法應(yīng)該是: 

  1. for  ( auto  iter = m.begin(); iter != m.end();) {  
  2.   if  (...) {  
  3.   iter = m.erase(iter);  
  4.   continue ;  
  5.   }  else  {  
  6.   iter++;  
  7.   }  
  8.   } 

3. stringstream的性能問題

  1.  stringstream的清空是clear之后,置空。
  2.  stringstream在任何情況下都比snprintf慢。
  3.  memset是個(gè)很慢的函數(shù),寧愿新創(chuàng)建對(duì)象。
  4.  上述測(cè)試結(jié)果是單線程,改成多線程,同樣成立。
  5.  str += “a”, 比 str =str+ “a” 效率高很多,后者會(huì)創(chuàng)建新對(duì)象。

4. 智能指針(shared_ptr)使用注意

4.1盡量使用make_shared初始化

提高性能 

  1. std::shared_ptr<Widget> spw(newWidget); 

需要分配兩次內(nèi)存。每個(gè)std::shared_ptr都指向一個(gè)控制塊,控制塊包含被指向?qū)ο蟮囊糜?jì)數(shù)以及其他東西。這個(gè)控制塊的內(nèi)存是在std::shared_ptr的構(gòu)造函數(shù)中分配的。因此直接使用new,需要一塊內(nèi)存分配給Widget,還要一塊內(nèi)存分配給控制塊

 

  1. autospw = std::make_shared<Widget>(); 

一次分配就足夠了。這是因?yàn)閟td::make_shared申請(qǐng)一個(gè)單獨(dú)的內(nèi)存塊來同時(shí)存放Widget對(duì)象和控制塊。這個(gè)優(yōu)化減少了程序的靜態(tài)大小,因?yàn)榇a只包含一次內(nèi)存分配的調(diào)用,并且這會(huì)加快代碼的執(zhí)行速度,因?yàn)閮?nèi)存只分配了一次。另外,使用std::make_shared消除了一些控制塊需要記錄的信息,這樣潛在地減少了程序的總內(nèi)存占用。

異常安全 

  1. processWidget(std::shared_ptr<Widget>( new  Widget),   //潛在的資源泄露   
  2.   computePriority()); 

上述代碼存在內(nèi)存泄漏的風(fēng)險(xiǎn),上述代碼執(zhí)行分為3個(gè)步驟:

  1.  new  Widget

  2. shared_ptr構(gòu)造

  3. computePriority

編譯器不需要必須產(chǎn)生這樣順序的代碼,但“new Widget”必須在std::shared_ptr的構(gòu)造函數(shù)被調(diào)用前執(zhí)行。如果編譯器產(chǎn)生的順序代碼如下:

  1.  new  Widget

  2. 執(zhí)行computePriority。

  3. 執(zhí)行std::shared_ptr的構(gòu)造函數(shù)。

如果執(zhí)行步驟2:computePriority的時(shí)候程序出現(xiàn)異常,則在第一步動(dòng)態(tài)分配的Widget就會(huì)泄露了,因?yàn)樗肋h(yuǎn)不會(huì)被存放到在第三步才開始管理它的shared_ptr中

4.2 父類之類智能指針轉(zhuǎn)換

C++中是允許裸指針,因此裸指針之間轉(zhuǎn)換方法同C語言指針強(qiáng)轉(zhuǎn),智能指針轉(zhuǎn)換不能通過上述方法進(jìn)行強(qiáng)轉(zhuǎn),必須通過庫(kù)提供轉(zhuǎn)換函數(shù)進(jìn)行轉(zhuǎn)換。C++11的方法是:std::dynamic_pointer_cast;boost中的方法是:boost::dynamic_pointer_cast 

  1. #include <memory>  
  2. #include <boost/shared_ptr.hpp>  
  3. #include <boost/make_shared.hpp>  
  4. #include <iostream>  
  5. class  Base {  
  6.   public :  
  7.   Base(){}  
  8.   virtual  ~Base() {}  
  9. };  
  10. class  D :  public  Base {  
  11.   public :  
  12.   D(){}  
  13.   virtual  ~D() {}  
  14. };  
  15. int  main()  
  16.  

//方式一:先初始化子類智能指針,然后調(diào)用dynamic_pointer_cast轉(zhuǎn)換成基類智能指針對(duì)象 

  1. std::shared_ptr<D> d1 = std::make_shared<D>();  
  2. std::shared_ptr<Base> b1 = std::dynamic_pointer_cast<Base>(d1);   

//方式二:先new子類D的指針,然后調(diào)用shared_ptr的構(gòu)造函數(shù)初始化基類智能指針 

  1.   std::shared_ptr<Base> b2 = shared_ptr<Base>( new  D());  
  2.   return  0;  

結(jié)論

方式一和方式二均能夠?qū)崿F(xiàn)基類智能指針指向子類,但建議采用方式1,通過std::make_shared的方式構(gòu)造智能指針,然后進(jìn)行轉(zhuǎn)換;

5. map的安全查找辦法

即map[key]這種寫法,就是會(huì)創(chuàng)建元素(且不一定初始化),因此在業(yè)務(wù)邏輯是希望查找的時(shí)候,就老老實(shí)實(shí)用find,不然會(huì)有臟數(shù)據(jù)寫入。

6. string 的指針構(gòu)造

std::string 的構(gòu)造方式,除了與其它順序容器相近的方式之外,提供了三種額外的構(gòu)造方式:

string s(cp, n): s 是cp指向的數(shù)組中前n個(gè)字符的拷貝,該數(shù)組至少應(yīng)該包含n個(gè)字符

string s(s2, pos2):s 是string s2從下標(biāo)pos2開始的字符的拷貝,若pos2>s2.size(),構(gòu)造函數(shù)的行為未定義

string s(s2, pos2, len2):s 是string s2從下標(biāo)pos2開始len2個(gè)字符的拷貝,若pos2>s2.size(),構(gòu)造函數(shù)的行為未定義。不管len2的值是多少,構(gòu)造函數(shù)至多拷貝s2.size()-pos2個(gè)字符

std::string 未提供 string(cp, pos2, len2) 這種構(gòu)造方式,如果代碼中使用了該方式,最終會(huì)將 cp 指向的數(shù)組構(gòu)造成一個(gè)string,然后調(diào)用string(s2, pos2, len2)這種構(gòu)造方式。

不提供string(cp, pos2, len2)這種構(gòu)造方式原因在于:使用這種方式構(gòu)造容易出現(xiàn)問題,cp是一個(gè)指針,通常使用時(shí),能獲得其數(shù)組長(zhǎng)度并檢查傳入?yún)?shù);若傳入兩個(gè)參數(shù),容易出現(xiàn)越界。

7. 變量初始化

變量初始化總是沒錯(cuò)的,不管后面是否會(huì)修改該值。尤其是int等內(nèi)建的類型,在類或struct中及容易忽略初始化,使變量成為隨機(jī)值,產(chǎn)生不可預(yù)知的錯(cuò)誤。變量請(qǐng)初始化!變量請(qǐng)初始化!!變量請(qǐng)初始化!!! 

 

責(zé)任編輯:龐桂玉 來源: Linux公社
相關(guān)推薦

2009-04-07 11:17:48

程序員高薪求職

2020-02-20 10:45:51

Python數(shù)據(jù)疾病

2017-05-28 12:26:58

5GTCPIP

2020-06-12 11:03:22

Python開發(fā)工具

2024-06-26 10:37:05

2024-04-03 12:30:00

C++開發(fā)

2025-06-13 08:35:00

前向聲明C++代碼

2025-06-16 05:10:00

AI工具Galileo

2020-06-11 18:35:23

C++編程語言

2023-11-22 13:22:51

C++函數(shù)

2018-10-09 12:25:00

2021-05-28 18:12:51

C++設(shè)計(jì)

2018-08-23 11:58:53

區(qū)塊鏈數(shù)字貨幣比特幣

2025-02-26 00:43:15

LINQC#工具

2020-04-10 15:20:40

數(shù)據(jù)庫(kù)SQL索引

2024-12-24 12:10:00

代碼C++Lambda

2019-10-25 14:00:01

協(xié)作遠(yuǎn)程IT團(tuán)隊(duì)工具

2025-02-28 08:30:00

Git開發(fā)命令

2011-09-16 10:00:56

C++

2024-05-06 00:00:00

緩存高并發(fā)數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

伊人免费在线观看高清版| 高清中文字幕mv的电影| 免费在线观看av网站| 国内精品视频一区二区三区八戒| 欧美成人免费一级人片100| 尤物网站在线看| bbw在线视频| 欧美激情一区三区| 91一区二区三区| 一本一道无码中文字幕精品热| 日本在线电影一区二区三区| 日韩美一区二区三区| 国产91在线免费| 麻豆视频在线| www精品美女久久久tv| 国产在线拍偷自揄拍精品| 日韩特黄一级片| 欧美成人自拍| 精品亚洲一区二区三区四区五区| 97人人爽人人| 欧美色网在线| 欧美日韩免费看| www.-级毛片线天内射视视| 天堂а√在线8种子蜜桃视频| 黑人巨大精品欧美一区| 日本亚洲精品在线观看| 青青青在线视频| 残酷重口调教一区二区| 亚洲精品二三区| 少妇愉情理伦片bd| 六九午夜精品视频| 色综合久久久久综合体| 极品粉嫩国产18尤物| av片在线观看网站| 中文字幕一区二| 日本婷婷久久久久久久久一区二区| а√中文在线资源库| 理论片日本一区| 国产成+人+综合+亚洲欧洲| 国产午夜激情视频| 韩日成人在线| 久久天堂电影网| 谁有免费的黄色网址| 天天躁日日躁狠狠躁欧美| 日韩一区二区在线播放| 欧美一级xxxx| 久久国产三级| 欧美唯美清纯偷拍| 亚洲天堂网一区| 一区在线影院| 欧美中文字幕一区二区三区亚洲| 男人操女人逼免费视频| av资源网在线播放| 亚洲国产精品尤物yw在线观看| 五月天综合婷婷| 国产素人视频在线观看| 亚洲男人的天堂网| 天堂av在线中文| 中文字幕中文字幕在线中高清免费版| 国产精品毛片高清在线完整版 | 日韩免费av网站| 一本久久知道综合久久| 亚洲 日韩 国产第一| 日韩av一区二区在线播放| 日韩午夜在线电影| 欧美一级大片在线免费观看| 亚洲 欧美 日韩 综合| 亚洲尤物影院| 国产激情久久久| 一区两区小视频| 极品少妇xxxx偷拍精品少妇| 亚洲已满18点击进入在线看片 | 亚洲激情一区二区| 天堂аⅴ在线地址8| 亚洲免费在线看| 青青草视频在线视频| h片视频在线观看| 色综合久久久久久久| 特级丰满少妇一级| 国产一区二区三区精品在线观看| 精品久久久三级丝袜| 在线免费播放av| 欧美精选一区二区三区| 久久久精品亚洲| 国产无遮挡免费视频| 视频一区在线视频| 成人黄色av网站| 欧美一区二区在线观看视频| 久久久久国产精品麻豆| 午夜精品美女久久久久av福利| 秋霞影院午夜丰满少妇在线视频| 亚洲免费av观看| 精品这里只有精品| 免费一级欧美在线观看视频| 日韩免费视频一区二区| 久久精品国产亚洲av麻豆| 欧美亚洲在线日韩| 欧美理论片在线观看| 六月丁香激情综合| 极品尤物av久久免费看| 久久精品二区| 免费看美女视频在线网站| 亚洲超碰精品一区二区| 国产成人黄色网址| 国产精品xxxav免费视频| 在线电影av不卡网址| 青青草原国产视频| 日韩黄色小视频| 国产精品v欧美精品∨日韩| 成人不用播放器| 亚洲成人久久影院| 在线观看日本www| 九九久久婷婷| 久久久久免费精品国产| 亚洲一卡二卡在线观看| 91免费视频网址| 国产玉足脚交久久欧美| 五月天色综合| 亚洲桃花岛网站| 日韩污视频在线观看| 国产综合久久久久久久久久久久| 欧美日本韩国一区二区三区| 丁香花在线电影小说观看| 7777精品久久久大香线蕉| 免费毛片视频网站| 在线观看视频免费一区二区三区| 成人欧美一区二区三区黑人孕妇| 久久久久久青草| 五月婷婷另类国产| 欧美日韩一区二区区别是什么| 日本电影一区二区| 国产成人鲁鲁免费视频a| 婷婷开心激情网| 亚洲精选视频在线| 特黄视频免费观看| 久久一级电影| 国产欧美日韩免费看aⅴ视频| 猫咪在线永久网站| 天天做天天摸天天爽国产一区| 亚洲综合伊人久久| 久久神马影院| 91九色在线视频| 免费黄色网址在线观看| 欧美撒尿777hd撒尿| 法国伦理少妇愉情| 国产婷婷精品| 免费看成人片| 手机在线理论片| 亚洲精品一区二区久| 午夜精品久久久久久久久久久久久蜜桃| 国产91在线观看丝袜| 97碰在线视频| 99a精品视频在线观看| 色综合久久久888| 精品人妻一区二区三区浪潮在线 | 国产999精品久久久久久绿帽| 天天综合中文字幕| 亚洲国产综合在线观看| 久久国产精品久久久| 成人黄色免费视频| 亚洲一二三四久久| 人妻无码中文久久久久专区| 亚洲免费网址| 日本一区二区三区视频免费看| 日韩成人亚洲| 日韩在线免费视频观看| av综合在线观看| 亚洲国产精品久久不卡毛片 | 国产精品久久777777换脸| 最新日韩av在线| 99热这里只有精品2| 黄色综合网站| 久久婷婷开心| 美女色狠狠久久| 久久精品国产清自在天天线| www.久久色| 激情成人中文字幕| 97在线观看免费视频| 韩国欧美国产1区| 欧美精品一区二区三区三州| 狠狠色狠狠色综合婷婷tag| 国产精品久久久久免费a∨大胸| 午夜老司机在线观看| 日韩免费高清视频| 成人a v视频| 亚洲精品videosex极品| 东京热av一区| 日本欧美在线看| 大片在线观看网站免费收看| 嫩草国产精品入口| 国产综合在线观看视频| 男女在线视频| 国产亚洲欧美日韩精品| 99产精品成人啪免费网站| 精品久久久久久亚洲精品| 欧美a在线播放| 成人av免费在线播放| 一区二区三区入口| 99re国产精品| 中文字幕一区二区三区5566| 日韩大胆成人| 亚洲一区二区自拍| 台湾佬成人网| 欧美激情视频在线免费观看 欧美视频免费一| 少妇激情av一区二区| 欧美一区二区三区四区久久| 日韩手机在线视频| 一区二区三区高清| 懂色av粉嫩av浪潮av| 成人免费电影视频| 爽爽爽在线观看| 久久久久久穴| 国产精品又粗又长| 自拍日韩欧美| 亚洲精品高清国产一线久久| 蜜桃一区av| 91视频99| 欧美午夜三级| 国产成人在线一区二区| 国产一二三在线| 欧美乱大交做爰xxxⅹ性3| 91看片在线观看| 亚洲欧美制服中文字幕| 神马久久久久久久久久| 日韩午夜激情免费电影| 中文字幕乱码无码人妻系列蜜桃| 天天综合网天天综合色| 国产一级做a爰片在线看免费| 综合久久综合久久| 91视频免费看片| 久久免费视频一区| 亚洲第一黄色网址| 成人av在线网| 日本美女视频网站| 国产91精品一区二区| 老司机久久精品| 久草中文综合在线| 国产精品嫩草影院8vv8| 日本午夜一本久久久综合| 日本黄色三级大片| 午夜一级在线看亚洲| 免费成人在线视频网站| 亚洲精一区二区三区| 国产免费裸体视频| 一区二区自拍| 成人免费播放器| 亚洲精品男同| 日本免费黄视频| 国产精品一二| 少妇人妻互换不带套| 日韩二区三区在线观看| 高清一区二区视频| 久久精品国产精品亚洲红杏| 中文字幕国产免费| 狠狠色丁香九九婷婷综合五月| 色网站在线视频| 国产精品一区二区久久不卡| 无码人妻少妇色欲av一区二区| 国产精选一区二区三区| 无码国产精品久久一区免费| 丁香五精品蜜臀久久久久99网站 | 久久激情五月丁香伊人| 巨大荫蒂视频欧美大片| 欧美精品在线免费观看| 超级碰碰不卡在线视频| 国产91精品久| 国产经典一区| 91夜夜未满十八勿入爽爽影院| 亚洲精品一区在线| 另类欧美小说| 日韩啪啪电影网| 国产黄色激情视频| 蜜桃久久av| 久久精品国产露脸对白| 国产不卡在线视频| 欧洲女同同性吃奶| 国产精品国产三级国产普通话蜜臀 | 国产精品97在线| 日本伊人色综合网| 韩国一区二区在线播放| 成人一区二区三区视频| 尤物视频最新网址| 亚洲欧洲国产日本综合| 国产稀缺真实呦乱在线| 色天天综合色天天久久| 国产精品视频a| 亚洲国产成人av在线| 都市激情在线视频| 欧美激情a∨在线视频播放| 中老年在线免费视频| 国产在线视频91| 理论片一区二区在线| 天天综合狠狠精品| 国产精品99免费看| 青青青在线视频免费观看| 国产999精品久久久久久绿帽| 国产高清一区二区三区四区| 一区二区三区美女| 国产又粗又猛又爽又| 欧美刺激脚交jootjob| 成人在线观看网站| 久久久久久久一区二区三区| 久久三级毛片| 精品一区二区视频| 亚洲高清影视| 男女爽爽爽视频| 成人视屏免费看| 99久久精品久久亚洲精品| 欧美日韩国产中文精品字幕自在自线| 在线观看免费中文字幕| 国产丝袜一区二区三区| 色在线视频网| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | gogogo免费高清日本写真| 亚洲欧美日韩国产一区| 在线观看欧美一区二区| 中文av一区二区| 欧产日产国产69| 精品播放一区二区| 成年人黄视频在线观看| 国产精品久久久久久久久久免费| 99精品在免费线中文字幕网站一区| 亚洲图片小说在线| 亚洲免费在线| 精品国产人妻一区二区三区| 亚洲综合久久久久| 国产aⅴ一区二区三区| 中文字幕综合在线| 成人自拍视频网| 欧美一区二区在线| 校园春色综合网| 真人bbbbbbbbb毛片| 亚洲午夜在线观看视频在线| 国产免费一区二区三区免费视频| 日韩在线资源网| 日本综合视频| 深夜福利成人| 日韩高清在线观看| 波多野结衣一二三四区| 91福利区一区二区三区| 番号集在线观看| 国产精品av在线播放| 国产成人一区| 中文久久久久久| 国产精品美女一区二区三区| 亚洲高清在线看| 夜夜嗨av一区二区三区免费区 | 亚洲啪啪91| 色综合久久五月| 精品久久久精品| 亚洲三区在线播放| 日韩美女在线观看| av亚洲免费| 国产探花在线看| 亚洲色图视频网| 亚洲国产精品久久人人爱潘金莲| 色综合天天综合网国产成人网| 视频亚洲一区二区| 日韩一级性生活片| 91亚洲国产成人精品一区二区三 | 国产免费一区二区三区网站免费| 色老汉一区二区三区| 国内精品一区视频| 国产主播在线一区| 欧美精品1区| 天天躁日日躁狠狠躁免费麻豆| 舔着乳尖日韩一区| 国产在线视频网址| 91日韩在线播放| 在线观看日韩av电影| 久久久久亚洲av成人无码电影| 欧美日韩一区成人| 99自拍视频在线观看| 国内精品视频在线播放| 久久激情中文| 国产喷水在线观看| 精品国产一区二区精华| 最新日韩精品| 中文字幕一区二区三区四区五区六区 | 欧美性猛交xxxxx水多| av在线首页| 超碰97网站| 首页国产欧美久久| 欧美人妻精品一区二区免费看| 日韩电影中文字幕av| 精品国产黄a∨片高清在线| 成人免费在线视频播放| 2021国产精品久久精品| 一区二区美女视频| 午夜精品福利在线观看| 欧美精选视频在线观看| 少妇伦子伦精品无吗| 色老汉av一区二区三区| 中文字幕伦理免费在线视频| 免费看污久久久| 国产一区二区三区香蕉| 潘金莲一级淫片aaaaaa播放| 欧美久久精品一级黑人c片| 久久99高清| 日韩黄色一区二区|