2

我有一个动态数组(对于这个例子,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 会删除以后可能出现的任何错误。

4

1 回答 1

2

您发布的代码是正确的。

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

但是,我仍然建议首先避免所有这些,vector <unique_ptr <polyTerm> >而是​​使用。那么你所要做的就是erase你想要的任何元素,或者clear整个vector,而不必担心使用正确的类型和数量newand delete


我将vector在这里演示使用 a of 智能指针,通过使用来巧妙地避免缺少make_unique(直到 C++14)shared_ptr

// Create array (vector)
vector <shared_ptr <polyTerm>> polyn; 
// Populate array
polyn.push_back (make_shared (5.0, 1));
polyn.push_back (make_shared (2,0, 1));
// Remove 0th element from array
polyn.erase (polyn.begin());
于 2013-11-04T17:08:39.340 回答