2015-11-03 50 views
-1

由於這裏說的:How to use delete with a variable pointed to by two pointers? 一個只能刪除一次,然後所有的指針就不會工作,但下面的代碼:如何使用一個變量使用刪除指向C++中兩個指針

#include<iostream> 
using namespace std; 

int main(){ 
    string * str1 = new string("abc"); 
    string * str2 = str1; 
    cout<< *str2 <<endl; 
    delete str1; 
    str1 = NULL; 
    cout<< *str2<<endl; 
} 

輸出是:

abc 
abc 

那麼,怎麼回事?

+1

未定義行爲,這就是 –

+0

歡迎來到未定義行爲的神奇世界 – StoryTeller

+0

您正在取消引用指向已刪除內存的指針,這是未定義的行爲(即任何事情都可能發生)。 – 101010

回答

1

一旦你刪除一個指針,訪問它是undefined behavior,有時可能會打印舊的內容,有時可能會崩潰,或者可以做一些超出思考一些其他的時間。

爲了處理刪除共享指針的情況下,使用std::shared_ptr或類似的引用計數管理器包裝,而不是裸指針。

0

一個未定義行爲的結果是可能似乎工作。而解引用指針遭到破壞的物品(如你cout<< *str2<<endl;做)是不確定的行爲。