如上所述:How to use delete with a variable pointed to by two pointers? 一个人只能删除一次,然后所有指针都不起作用,但代码如下:
#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
那么,问题是什么?
答案 0 :(得分:1)
删除指针后,访问它是undefined behavior,有时可能会打印旧内容,有时可能会崩溃,或者可能会做一些其他时间以外的事情。
要处理删除共享指针的情况,请使用std::shared_ptr
或类似的引用计数管理器包装器而不是裸指针。
答案 1 :(得分:0)
未定义行为的结果之一似乎可行。并且取消引用指向被破坏对象的指针(就像使用cout<< *str2<<endl;
一样)是未定义的行为。