删除复制的指针

时间:2016-05-09 15:50:30

标签: c++ delete-operator

删除复制的指针与删除原始指针一样吗?

int * a = new int;
*a = 8;
int *b = a;
delete b;

在上面的代码中,删除b后,我是否仍应删除a

在我遇到问题的实际代码中,我做了

std::vector<ifstream * >Infiles(5);
for (int i = 0; i < 5; ++i){
   ifstream * ptr = new ifstream;
   (*ptr).open(file_names[i].c_str());
   Infiles[i] = ptr;
}

/* doing a bunch of reading with Infiles */

for (int i = 0; i < Infiles.size(); ++i){
            delete Infiles[i]; // this part crashes
            Infiles[i] = NULL;
}

但是行delete Infiles[i];会导致崩溃,我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

是的,你是绝对正确的。通过指针删除会使引用已删除对象的所有指针无效。避免这样的问题的最好方法是停止在C ++代码中使用拥有指针。

顺便说一下,这个事实是在删除它们之后设置指针{/ 1}}的最好理由 - 因为它对同一指针的其他副本没有任何作用,它不会代码更安全。