2011-06-02 109 views
3

问题:创建指向类对象的指针数组

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

我不确定如果我做对了或没有。

阅读器是基类。约翰,大卫,丹尼尔,马克是派生类

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

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

} 

这是对的吗?

+0

对我来说看起来还行。尽管将'return 0;'加到最后。 – trojanfoe 2011-06-02 08:36:05

+1

你有内存泄漏 - 你必须稍后“删除”它们。 – sharptooth 2011-06-02 08:36:24

+0

使用std :: vector代替 – 2011-06-02 08:37:26

回答

5

您的代码是正确

而作为@sharptooth建议,在分配的obj[] s上练习delete。在C++ new分配内存和delete释放。

+0

在这种情况下,需要'delete [] obj'来正确地销毁和删除数组中的所有对象及其指针 – eFloh 2014-01-30 10:44:12

+1

@eFloh delete [] obj是一个可怕的想法。这是错误的。 'obj'是一个局部变量。它没有被分配,所以你不能删除它。当它超出范围时它将被销毁。这种破坏不会做什么,因为指针没有析构函数。 但是,obj [0-3]包含指向已分配对象的指针。这些必须用“delete obj [0];”等等来删除。 请注意,由于这是不完整的代码,我们无法判断它是否正确。 Reader是否有虚拟析构函数? – 2014-05-21 22:36:01

+0

对不起,跳过了@sharptooth提案而没有注意到这一点。我主要关注数组应该使用new []分配并使用delete的数组变体销毁的事实... – eFloh 2014-05-22 12:32:01