2015-11-03 72 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;做)是不确定的行为。