删除复制的指针与删除原始指针一样吗?
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];
会导致崩溃,我的代码出了什么问题?
答案 0 :(得分:1)
是的,你是绝对正确的。通过指针删除会使引用已删除对象的所有指针无效。避免这样的问题的最好方法是停止在C ++代码中使用拥有指针。
顺便说一下,这个事实是在删除它们之后设置指针{/ 1}}的最好理由 - 因为它对同一指针的其他副本没有任何作用,它不会代码更安全。