亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3488 | 回復(fù): 8
打印 上一主題 下一主題

[C++] c++構(gòu)造函數(shù)要try catch 還是直接throw [復(fù)制鏈接]

論壇徽章:
7
摩羯座
日期:2013-12-05 10:42:57辰龍
日期:2013-12-27 13:40:49亥豬
日期:2014-01-15 09:10:37天秤座
日期:2014-01-20 11:22:20辰龍
日期:2014-01-26 17:02:25午馬
日期:2014-01-27 14:22:34水瓶座
日期:2014-02-19 09:36:40
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-11-13 10:38 |只看該作者 |倒序?yàn)g覽
有個(gè)問題比較疑惑,現(xiàn)有個(gè)類

class test
{
public:
   test(uint32_t num) {
     if (num ==0) {
       //如果輸入為0 怎么辦?
    }
    m_pdata = new int[num];
   //如果new失敗怎么辦?
  }
private:
  int *m_pdata;
}

大牛支招

論壇徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52雙子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午馬
日期:2013-10-18 21:43:38
2 [報(bào)告]
發(fā)表于 2015-11-13 11:03 |只看該作者
拋異常就不會(huì)調(diào)用析構(gòu)了,如果沒事就拋吧;如果后續(xù)可以判斷未初始化好就catch住吧。

建議增加一個(gè)初始化函數(shù)更好些。

論壇徽章:
44
15-16賽季CBA聯(lián)賽之浙江
日期:2021-10-11 02:03:59程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-02 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2016-04-25 10:55:452016科比退役紀(jì)念章
日期:2016-04-23 00:51:2315-16賽季CBA聯(lián)賽之山東
日期:2016-04-17 12:00:2815-16賽季CBA聯(lián)賽之福建
日期:2016-04-12 15:21:2915-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-24 21:38:2715-16賽季CBA聯(lián)賽之福建
日期:2016-03-18 12:13:4015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-05 00:55:2015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-04 21:11:3615-16賽季CBA聯(lián)賽之天津
日期:2016-11-02 00:33:1215-16賽季CBA聯(lián)賽之浙江
日期:2017-01-13 01:31:49
3 [報(bào)告]
發(fā)表于 2015-11-13 16:29 |只看該作者
本帖最后由 windoze 于 2015-11-13 16:35 編輯

構(gòu)造函數(shù)里拋異常會(huì)讓你有一個(gè)半截子對(duì)象,而且也不會(huì)調(diào)用這個(gè)對(duì)象的析構(gòu)函數(shù)。
但是每個(gè)數(shù)據(jù)成員的析構(gòu)函數(shù)都會(huì)被調(diào)!
但是每個(gè)數(shù)據(jù)成員的析構(gòu)函數(shù)都會(huì)被調(diào)!
但是每個(gè)數(shù)據(jù)成員的析構(gòu)函數(shù)都會(huì)被調(diào)!
重要的事情說三遍!
也就是說,只要你保證對(duì)象里的每個(gè)數(shù)據(jù)成員都符合RAII的要求,就不會(huì)有資源泄漏。
比如說你的對(duì)象里有一個(gè)unique_ptr,那么如果你在構(gòu)造函數(shù)里拋出了異常,這個(gè)unique_ptr會(huì)正確的處理這種情況,如果它此時(shí)已經(jīng)構(gòu)造好,指向一個(gè)有效的對(duì)象,那么這個(gè)對(duì)象會(huì)析構(gòu),否則就什么也不做。
這個(gè)故事告訴我們,不要使用裸指針管理資源,像lz貼的那段代碼就會(huì)煩死鳥挖,改成這樣就能少煩一點(diǎn)了:

  1. class test
  2. {
  3. public:
  4.     test(uint32_t num)
  5.     {
  6.         if (num ==0) {
  7.             //如果輸入為0 怎么辦?
  8.             throw(...);
  9.         }
  10.         m_pdata.reset(new int[num]);
  11.     }
  12. private:
  13.     std::unique_ptr<int[]> m_pdata;
  14. }
復(fù)制代碼
由于new能正確處理0長(zhǎng)度數(shù)組,所以程序可以簡(jiǎn)化成這樣:

  1.     test(uint32_t num) : m_pdata(new int[num]) {
  2.         // ...
  3.     }
復(fù)制代碼
如果new失敗什么事也不會(huì)有

論壇徽章:
7
摩羯座
日期:2013-12-05 10:42:57辰龍
日期:2013-12-27 13:40:49亥豬
日期:2014-01-15 09:10:37天秤座
日期:2014-01-20 11:22:20辰龍
日期:2014-01-26 17:02:25午馬
日期:2014-01-27 14:22:34水瓶座
日期:2014-02-19 09:36:40
4 [報(bào)告]
發(fā)表于 2015-11-13 16:32 |只看該作者
使用裸指針管理資源, 怎么理解?!

回復(fù) 3# windoze


   

論壇徽章:
7
摩羯座
日期:2013-12-05 10:42:57辰龍
日期:2013-12-27 13:40:49亥豬
日期:2014-01-15 09:10:37天秤座
日期:2014-01-20 11:22:20辰龍
日期:2014-01-26 17:02:25午馬
日期:2014-01-27 14:22:34水瓶座
日期:2014-02-19 09:36:40
5 [報(bào)告]
發(fā)表于 2015-11-13 16:36 |只看該作者
我理解你的意思了,但是我們基于redhat6.3做的開發(fā),我也想用智能指針,但是redhat6.3的gcc不支持c++11.
回復(fù) 3# windoze


   

論壇徽章:
7
摩羯座
日期:2013-12-05 10:42:57辰龍
日期:2013-12-27 13:40:49亥豬
日期:2014-01-15 09:10:37天秤座
日期:2014-01-20 11:22:20辰龍
日期:2014-01-26 17:02:25午馬
日期:2014-01-27 14:22:34水瓶座
日期:2014-02-19 09:36:40
6 [報(bào)告]
發(fā)表于 2015-11-13 16:38 |只看該作者
我覺得二樓的提供的辦法最好,也是我最常用的,加個(gè)初始化函數(shù).

回復(fù) 3# windoze


   

論壇徽章:
44
15-16賽季CBA聯(lián)賽之浙江
日期:2021-10-11 02:03:59程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-02 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2016-04-25 10:55:452016科比退役紀(jì)念章
日期:2016-04-23 00:51:2315-16賽季CBA聯(lián)賽之山東
日期:2016-04-17 12:00:2815-16賽季CBA聯(lián)賽之福建
日期:2016-04-12 15:21:2915-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-24 21:38:2715-16賽季CBA聯(lián)賽之福建
日期:2016-03-18 12:13:4015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-05 00:55:2015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-04 21:11:3615-16賽季CBA聯(lián)賽之天津
日期:2016-11-02 00:33:1215-16賽季CBA聯(lián)賽之浙江
日期:2017-01-13 01:31:49
7 [報(bào)告]
發(fā)表于 2015-11-13 16:42 |只看該作者
回復(fù) 5# kdkgod

老版本的GCC可以用boost.smart_ptr里面的scoped_ptr湊合一下,在這個(gè)場(chǎng)合沒什么區(qū)別。

論壇徽章:
44
15-16賽季CBA聯(lián)賽之浙江
日期:2021-10-11 02:03:59程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-02 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2016-04-25 10:55:452016科比退役紀(jì)念章
日期:2016-04-23 00:51:2315-16賽季CBA聯(lián)賽之山東
日期:2016-04-17 12:00:2815-16賽季CBA聯(lián)賽之福建
日期:2016-04-12 15:21:2915-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-24 21:38:2715-16賽季CBA聯(lián)賽之福建
日期:2016-03-18 12:13:4015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-05 00:55:2015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-04 21:11:3615-16賽季CBA聯(lián)賽之天津
日期:2016-11-02 00:33:1215-16賽季CBA聯(lián)賽之浙江
日期:2017-01-13 01:31:49
8 [報(bào)告]
發(fā)表于 2015-11-13 16:45 |只看該作者
回復(fù) 6# kdkgod

不過話說回來,你干嗎不用vector<int>?這個(gè)再老版本的C++也該有了。

論壇徽章:
7
摩羯座
日期:2013-12-05 10:42:57辰龍
日期:2013-12-27 13:40:49亥豬
日期:2014-01-15 09:10:37天秤座
日期:2014-01-20 11:22:20辰龍
日期:2014-01-26 17:02:25午馬
日期:2014-01-27 14:22:34水瓶座
日期:2014-02-19 09:36:40
9 [報(bào)告]
發(fā)表于 2015-11-13 16:54 |只看該作者
歷史原因,
我實(shí)現(xiàn)了一個(gè)基于數(shù)組的無鎖的緩沖區(qū)模板類. 數(shù)組的size是用過template傳,但是這樣編譯之后就指定了數(shù)組的大小,為了以后能通過配置文件靈活改變緩沖區(qū)大小,所以才這樣的方式傳數(shù)組的大小.


回復(fù) 8# windoze


   
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP