删除指针数组中的元素(C ++)

时间:2018-10-13 13:34:34

标签: c++ pointers

假设我有一个类似的指针数组

Person** p = new Person*[5]
// p is filled with five person pointer (say p[2] = *John where John is an object of person
// now we want to remove p[2]
delete p[2];
p[2] = p[3];
p[3] = p[4];
p[4] = nullptr;

除非我删除delete和nullptr行,否则无法编译该程序。 为什么会这样?如果我不删除p [2],应该会出现问题,因为我无法再次访问john?

2 个答案:

答案 0 :(得分:1)

如果您有这种模式,请使用std::list(或std::vector)。标准容器将比您提供的大多数解决方案都要好。

答案 1 :(得分:0)

要使nullptr工作,必须使用选项--std=c++11进行编译,因为它是C ++ 11中的关键字,例如auto和lambda表达式语法。

gcc yourfile.cpp --std=c++11

但是关于delete,它只是第一行中被遗忘的分号。

C / C ++需要用分号分隔语句。

您应该这样写:

Person** p = new Person*[5]; // A semi-colon was forgotten here.
// p is filled with five person pointer (say p[2] = *John where John is an object of person
// now we want to remove p[2]
delete p[2];
p[2] = p[3];
p[3] = p[4];
p[4] = nullptr;

如果您不想为--std=c++11进行编译,请尝试使用0NULL而不是nullptr

p[4] = NULL;