2010-09-14 99 views
0

我有一个类应该包含其他对象的一些实例的数组。头文件看起来是这样的:C++对象数组

class Document { 
private: 
    long arraysize; 
    long count; 
    Row* rows; 
public: 
    Document(); 
    ~Document(); 
} 

然后在构造函数中我初始化数组是这样的:

this->rows = new Row[arraysize]; 

但出于某种原因,这只是设置rows到行的一个实例,而不是数组行。我将如何初始化一个Row对象数组?

回答

4

如果arraySize包含一个合理的值,那么您实际上会得到一个数组。我想你相信你的调试器,调试器只显示第0个元素(这就是调试器如何处理指针),所以你认为这个指针后面只有一个对象。

1

对于i[0;arraysize[,*(this->rows+i)应该是行的一个实例。

5

SharpTooth和Wok的答案都是正确的。

我想补充一点,如果你已经在这个水平上挣扎了,在这种情况下使用std::vector而不是内置数组可能会更好。矢量将透明地处理增长和缩小。

+0

+1为std :: vector。如果你真的需要指针(由于多态性),使用智能指针或'delete_vector'函数。 – rubenvb 2010-09-14 09:17:35

5

这应该工作。一个可能的“错误”将是arraySize的错误值。

但是,您最好使用标准库中的std::vector来达到此目的。

#include <vector> 
class Document { 
    // ... 
    std::vector<Row> rows; 
    // ... 
}; 

,并在构造函数:

Document::Document() : rows(arraySize) { // ... } 

Document::Document() { rows.assign(arraySize, Row()); } 
+0

对于std :: vector +1 – 2010-09-14 08:33:49

1

恰恰是什么让你认为rows是只有一个元素?确保你arraysize不是1.如果是,你会得到1个元素的数组。你要知道,你仍必须调用delete []大小为1

同样的数组,为什么比countarraysize不同?使用该术语,您应该制作一组count元素,arraysize应该等于sizeof(Row) * count

此外,您还特别问“我将如何初始化Row对象数组?”。你的意思是分配吗?如果是这样,那你就是这么做的。如果你的意思是初始化,当数组被分配时,将在数组的每个元素上调用的默认构造函数。