最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中的delete不會將操作數(shù)置0

 更新時間:2016年05月22日 09:40:43   投稿:hebedich  
這篇文章主要介紹了C++中的delete不會將操作數(shù)置0的相關(guān)資料,需要的朋友可以參考下

考慮一下:

  delete p;
  // ...
  delete p;

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

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

  delete p+1;
  delete f(x);

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

  T* p = new T;
  T* q = p;
  delete p;
  delete q; // 糟糕!

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

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

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

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

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

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

相關(guān)文章

  • 遞歸刪除二叉樹中以x為根的子樹

    遞歸刪除二叉樹中以x為根的子樹

    今天小編就為大家分享一篇關(guān)于遞歸刪除二叉樹中以x為根的子樹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 關(guān)于C語言中弱符號與弱引用的實際應用問題

    關(guān)于C語言中弱符號與弱引用的實際應用問題

    在編碼過程中,我們經(jīng)常遇到符號重定義的錯誤問題,本文通過實例代碼展示給大家介紹了C語言弱符號與弱引用的實際應用問題,一起看看吧
    2021-09-09
  • C++實現(xiàn)掃雷小游戲

    C++實現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細介紹了C++實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Qt QImage和QPixmap使用與區(qū)別

    Qt QImage和QPixmap使用與區(qū)別

    Qt中QImage類封裝了對于一般圖像像素級的操作,圖像顯示則使用QPixmap,本文主要介紹了Qt QImage和QPixmap使用與區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系

    C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系

    這篇文章主要介紹了C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • C++之拼接長字符串問題

    C++之拼接長字符串問題

    這篇文章主要介紹了C++之拼接長字符串問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++中的封裝、繼承、多態(tài)理解

    C++中的封裝、繼承、多態(tài)理解

    這篇文章主要介紹了C++中的封裝、繼承、多態(tài)介紹,需要的朋友可以參考下
    2020-01-01
  • C++ 實現(xiàn)PE文件特征碼識別的步驟

    C++ 實現(xiàn)PE文件特征碼識別的步驟

    PE文件就是我們常說的EXE可執(zhí)行文件,針對文件特征的識別可以清晰的知道該程序是使用何種編程語言實現(xiàn)的,前提是要有特征庫,PE特征識別有多種形式,第一種是靜態(tài)識別,第二種則是動態(tài)識別,我們經(jīng)常使用的PEID查殼工具是基于靜態(tài)檢測的方法。
    2021-06-06
  • C++實現(xiàn)拼圖游戲代碼(graphics圖形庫)

    C++實現(xiàn)拼圖游戲代碼(graphics圖形庫)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)拼圖游戲代碼,帶有g(shù)raphics圖形庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C++用read()和write()讀寫二進制文件的超詳細教程

    C++用read()和write()讀寫二進制文件的超詳細教程

    二進制的文件肉眼我們是讀不懂的,如果通過二進制的讀寫操作就可以讀懂,下面這篇文章主要給大家介紹了關(guān)于C++用read()和write()讀寫二進制文件的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06

最新評論

赞皇县| 新津县| 当雄县| 历史| 星子县| 孝昌县| 杭州市| 嘉义县| 平利县| 格尔木市| 云和县| 新源县| 桂平市| 宜昌市| 南召县| 乌鲁木齐市| 成武县| 克什克腾旗| 游戏| 丰顺县| 大邑县| 交城县| 巴中市| 四平市| 灵川县| 海阳市| 锡林浩特市| 砚山县| 鄂托克前旗| 双鸭山市| 福泉市| 阳城县| 彭泽县| 吉木乃县| 新建县| 临湘市| 陇南市| 西平县| 丹凤县| 堆龙德庆县| 古浪县|