欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

考慮一下:

  delete p;
  // ...
  delete p;

如果在...部分沒有涉及到p 的話,那么第二個“delete p;”將是一個嚴重的錯誤,因為C++的實現(xiàn)(譯注:原文為a C++ implementation,當(dāng)指VC++這樣的實現(xiàn)了C++標準的具體工具)不能有效地防止這一點(除非通過非正式的預(yù)防手段)。既然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()); // 錯誤:應(yīng)該使用一個非常量(non-const)的引用傳遞右值
  destroy(p+1); // 錯誤:應(yīng)該使用一個非常量(non-const)的引用傳遞右值

上一篇:淺談C語言的字符串分割

欄    目:C語言

下一篇:C語言練習(xí)題:自由落體的小球簡單實例

本文標題:C++中的delete不會將操作數(shù)置0

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2280.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有