从动态数组中删除一个动态对象

时间:2013-11-04 17:01:21

标签: c++ pointers dynamic delete-operator

我有一个动态数组(例如,SIZE = 2):

polyTerm** polyn = new polyTerm* [SIZE];

然后我向数组中添加了一些新的ponlyTerm对象:

polyn[0] = new polyTerm(5.0,1);
polyn[1] = new polyTerm(2.0,1);

现在我想从插槽0中删除该对象并使指针为空。我该怎么做呢?我目前有:

delete &polyn[0];

然后我用:

polyn[0] = NULL;

使指针为空。

这会有用吗?

编辑: 更正,我需要使用delete polyn[0] - 即便如此,将其设置为NULL应该会影响指针,因为它仍然会在技术上指向对象的原始位置。将其重置为NULL可以删除以后可能弹出的任何错误。

1 个答案:

答案 0 :(得分:2)

您发布的代码是正确的。

单个对象指针polyn[0]是使用[]的非new版本创建的,因此必须使用非[]delete删除1}} - 这就是你在做什么。

我仍然建议首先避免所有,然后使用vector <unique_ptr <polyTerm> >代替。然后,您需要做的只是erase您想要的任何元素,或clear整个vector,而不必担心使用new和{{的正确类型和数量1}}。


我将演示使用delete智能指针,通过使用vector整齐地避免缺少make_unique(直到C ++ 14)。

shared_ptr