假设我有一个类似的指针数组
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?
答案 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
进行编译,请尝试使用0
或NULL
而不是nullptr
。
p[4] = NULL;