创建指向类对象的指针数组

4

问题:

创建至少四个指向Reader对象的指针数组。使用New运算符创建至少四个指向派生类对象的指针,并将它们分配到数组中。

我不确定我是否做对了。

Reader是基类。John、David、Daniel和Mark是派生类。

int main(void)
{
     Reader *obj[4];

    obj[0] = new John();
    obj[1] = new David();
    obj[3] = new Daniel();
    obj[2] = new  Mark();

}

这样做对吗?


看起来没问题。不过在最后加上 return 0; - trojanfoe
1
你有一个内存泄漏 - 你必须稍后使用 delete 删除它们。 - sharptooth
1
@Segey:这里的建议不太好。他被要求使用指针数组。这似乎是一种作业类型的事情。我完全赞成std::vector,但在这种特殊情况下并不是一个好的建议。 - Aamir
特别是如果他想要多态性。 - Puppy
@Aamir 这是Andrew Koenig关于C++教学的文章,讲述了为什么在C++中使用数组是不好的做法。即使你在做作业 - 我认为使用std :: vector而不是数组并向老师解释你的决定是没有理由的。 - Sergei Nikulov
显示剩余2条评论
1个回答

5

您的代码是正确的

正如@sharptooth建议的那样,要在分配的obj[]上进行delete的练习。在C ++中,new分配内存,delete释放内存。


在这种情况下,需要使用 delete[] obj 来正确地销毁和删除数组中的所有对象及其指针。 - eFloh
1
@eFloh delete [] obj 是一个糟糕的想法。这是错误的。'obj' 是一个局部变量。它没有被分配,所以你不能删除它。当它超出范围时,它将被销毁。这种销毁不会产生任何影响,因为指针没有析构函数。然而,obj[0-3] 包含指向已分配对象的指针。这些必须使用 "delete obj[0];" 等方式进行删除。请注意,由于这是不完整的代码,我们无法确定它是否正确。Reader 是否有虚拟析构函数? - Bruce Dawson
抱歉,没有注意到@sharptooth的建议,就主要关注于数组应该使用new[]进行分配,使用delete的数组变体进行销毁... - eFloh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接