• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    C++風格與技巧

    發布: 2008-4-23 16:39 | 作者: 不詳 | 來源: research.att.com | 查看: 123次 | 進入軟件測試論壇討論

    領測軟件測試網



    如果在...部分沒有涉及到p的話,那么第二個“delete p;”將是一個嚴重的錯誤,因為C++的實現(譯注:原文為a C++ implementation,當指VC++這樣的實現了C++標準的具體工具)不能有效地防止這一點(除非通過非正式的預防手段)。既然delete 0從定義上來說是無害的,那么一個簡單的解決方案就是,不管在什么地方執行了“delete p;”,隨后都執行“p=0;”。但是,C++并不能保證這一點。

    一個原因是,delete的操作數并不需要一個左值(lvalue)?紤]一下:

    delete p+1;

    delete f(x);

    在這里,被執行的delete并沒有擁有一個可以被賦予0的指針。這些例子可能很少見,但它們的確指出了,為什么保證“任何指向被刪除對象的指針都為0”是不可能的。繞過這條“規則”的一個簡單的方法是,有兩個指針指向同一個對象:

    T* p = new T;

    T* q = p;

    delete p;

    delete q; // 糟糕!

    C++顯式地允許delete操作將操作數左值置0,而且我曾經希望C++的實現能夠做到這一點,但這種思想看來并沒有在C++的實現中變得流行。

    如果你認為指針置0很重要,考慮使用一個銷毀的函數:

    template<class T> inline void destroy(T*& p) { delete p; p = 0; }

    考慮一下,這也是為什么需要依靠標準庫的容器、句柄等等,來將對new和delete的顯式調用降到最低限度的另一個原因。

    注意,通過引用來傳遞指針(以允許指針被置0)有一個額外的好處,能防止destroy()在右值上(rvalue)被調用:

    int* f();

    int* p;

    // ...

    destroy(f()); // 錯誤:應該使用一個非常量(non-const)的引用傳遞右值

    destroy(p+1); // 錯誤:應該使用一個非常量(non-const)的引用傳遞右值

    我能夠寫“void main()”嗎?

    這種定義:

    void main() { /* ... */ }

    在C++中從未被允許,在C語言中也是一樣。參見ISO C++標準3.6.1[2]或者ISO C標準5.1.2.2.1。規范的實現接受這種方式:

    int main() { /* ... */ }



    int main(int argc, char* argv[]) { /* ... */ }

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>