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

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

Chinaunix

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

delete何時(shí)開始生效。 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2005-08-07 14:08 |只看該作者 |倒序?yàn)g覽
本來我認(rèn)為當(dāng)對一個(gè)使用new分配的變量進(jìn)行delete后,該變量就應(yīng)當(dāng)立即失效了.但使用以下的代碼作測試,結(jié)果卻不是我所預(yù)期的.

  1. #include <iostream>;

  2. using namespace std;

  3. class Cat
  4. {
  5. public:
  6.         Cat()
  7.         {
  8.                 cout << "\n Cat Constructs\n";
  9.         }

  10.         ~Cat()
  11.         {
  12.                 cout << "\n Cat Destructs\n";
  13.         }

  14.         void sleep()
  15.         {
  16.                 cout << "\nI'm sleeping\n";
  17.         }

  18.         void speek()
  19.         {
  20.                 cout << "\nMEOW!\n";
  21.         }

  22.         void eat()
  23.         {
  24.                 cout << "\nWhere is the mouse!\n";
  25.         }
  26. };
  27.        

  28. int main()
  29. {
  30.         Cat* cat = new Cat();
  31.         if (NULL == cat)
  32.                 return -1;
  33.         delete cat;
  34.         cat->;eat();                //Works;
  35.         return (0);
  36. }
復(fù)制代碼

輸出:
Cat Constructs

Cat Destructs

Where is the mouse!
有兄弟能幫我解釋一下嗎?

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2005-08-07 14:27 |只看該作者

delete何時(shí)開始生效。

估計(jì)delete cat只是調(diào)用了析構(gòu)函數(shù), 而析構(gòu)函數(shù)一般用來釋放資源
但是cat指針仍然在程序里面
并沒有如你所愿變成NULL(cat 并不是malloc分派空間)
所以仍然可以調(diào)用,但是不能訪問已經(jīng)釋放掉的資源
你沒申請什么資源, 所以應(yīng)該就是你看到的樣子

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2005-08-07 14:27 |只看該作者

delete何時(shí)開始生效。

你如果在Cat類中加一個(gè)數(shù)據(jù)成員,并在構(gòu)造函數(shù)中將其賦個(gè)初值,然后,在delete之后看看那個(gè)數(shù)據(jù)成員的值就會(huì)發(fā)現(xiàn)delete的效果了。
不管是delete還是free,都不會(huì)將指針置為NULL,所以,良好的習(xí)慣是在delete或free或立即將指針置為NULL,否則就會(huì)有野指針的問題了。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2005-08-07 14:37 |只看該作者

delete何時(shí)開始生效。


  1. #include <iostream>;

  2. using namespace std;

  3. class Cat
  4. {
  5. public:
  6.         Cat(int val)
  7.         {
  8.                 value = val;
  9.                 cout << "\n Cat Constructs\n";
  10.         }

  11.         ~Cat()
  12.         {
  13.                 cout << "\n Cat Destructs\n";
  14.         }

  15.         void sleep()
  16.         {
  17.                 cout << "\nI'm sleeping\n";
  18.         }

  19.         void speek()
  20.         {
  21.                 cout << "\nMEOW!\n";
  22.         }

  23.         void eat()
  24.         {
  25.                 cout << "\nWhere is the mouse!\n";
  26.         }
  27. private:
  28.         int value;                       
  29. };
  30.        

  31. int main()
  32. {
  33.         Cat* cat = new Cat(10);
  34.         if (NULL == cat)
  35.                 return -1;
  36.         delete cat;
  37.        
  38.         int* tmp = new int[100000];
  39.         if (NULL ==tmp)
  40.                 return (-1);
  41.         *tmp = 100;
  42.         delete []tmp;
  43.         cat->;eat();                //Works;
  44.         return (0);
  45. }

復(fù)制代碼

修改后結(jié)果:

Cat Constructs

Cat Destructs

Where is the mouse!
我也知道應(yīng)當(dāng)是無效的,但不知怎么會(huì)出現(xiàn)這種結(jié)果.會(huì)不會(huì)是因?yàn)檫@是在C++中沒有定義的行為.

論壇徽章:
2
亥豬
日期:2014-03-19 16:36:35午馬
日期:2014-11-23 23:48:46
5 [報(bào)告]
發(fā)表于 2005-08-07 14:44 |只看該作者

delete何時(shí)開始生效。

改成下面再試試
  void eat()
   {
      value++;
      cout << "\nWhere is the mouse!\n";
   }

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2005-08-07 15:03 |只看該作者

delete何時(shí)開始生效。

還是一樣

論壇徽章:
2
亥豬
日期:2014-03-19 16:36:35午馬
日期:2014-11-23 23:48:46
7 [報(bào)告]
發(fā)表于 2005-08-07 15:26 |只看該作者

delete何時(shí)開始生效。

不好意思,是我大意看錯(cuò)了。我說成以前遇到的情況了:

  1. #include <iostream>;
  2. using namespace std;
  3. class Cat
  4. {
  5.         public:
  6.                 void eat()
  7.                 {
  8.                                                 //value++;     //this is the fault
  9.                         cout << "\nWhere is the mouse!\n";
  10.                 }
  11.         private:
  12.                 int value;         
  13. };
  14. int main()
  15. {
  16.         Cat* cat;
  17.         cat->;eat();      //Works;
  18.         return (0);
  19. }
復(fù)制代碼

你說的情況,還真是如你所說,,,一會(huì)想想看。

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
8 [報(bào)告]
發(fā)表于 2005-08-07 15:42 |只看該作者

delete何時(shí)開始生效。

野指針.

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2005-08-08 09:00 |只看該作者

delete何時(shí)開始生效。

delete成功后只是給那塊內(nèi)存做個(gè)可以回收的標(biāo)記,并不馬上清空。
你通過原來的指針還是可以看到里面的東東,就像你寫的那些。
反正我們通常做法是, delete后馬上把指向原來的那塊內(nèi)存的指針賦Null
SirFang 該用戶已被刪除
10 [報(bào)告]
發(fā)表于 2005-08-08 10:26 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(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ū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP