如何使用C ++中两个指针所指向的变量进行删除

时间:2015-11-03 12:42:41

标签: c++ pointers

如上所述: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

那么,问题是什么?

2 个答案:

答案 0 :(得分:1)

删除指针后,访问它是undefined behavior,有时可能会打印旧内容,有时可能会崩溃,或者可能会做一些其他时间以外的事情。

要处理删除共享指针的情况,请使用std::shared_ptr或类似的引用计数管理器包装器而不是裸指针。

答案 1 :(得分:0)

未定义行为的结果之一似乎可行。并且取消引用指向被破坏对象的指针(就像使用cout<< *str2<<endl;一样)是未定义的行为。