【问题标题】:c++ pointer (to an array) inside of a class object initialization类对象初始化内部的c ++指针(指向数组)
【发布时间】:2013-01-26 06:27:16
【问题描述】:

假设我有一个类,其中包含一个结构数组和一个指向该数组的指针。

struct Box {
    //stuff
};
class Foo {
    private:
        Box *boxPtr     //pointer to an array of Box structs
        int max;        //the size of the partially filled array
        int boxCounter; //the current number of non-NULL elements in the array
    public:
        Foo();                //constructor
        Foo(const Foo &obj);  //copy constructor
        ~Foo();               //destructor
        bool newBoxInsert(Box newBox){
            //adds another Box to my array of Box structs
            boxCounter++;
        }
        //etc
};

在我的 int main() 中,我必须以某种方式创建一个全新的 Foo 类对象。 我将需要部分填充那个大小不确定的数组,它的指针是 boxPtr。

我将如何初始化该数组?构造函数应该这样做吗?还是应该让 newBoxInsert 来处理?

在这两种情况下,我将如何实现?我猜我必须动态分配数组。如果是这样的话,那么最好将指针作为类成员......对吗?

例如,将第一个元素添加到我的数组时,我应该使用

boxCounter = 1;
boxPtr = new Box[boxCounter]; 

然后继续往数组中添加元素?

也许这只是用向量做得更好。添加元素时,它们更加...灵活(?)。向量可以包含结构作为元素吗?

[/n00b]

【问题讨论】:

  • 向量或任何其他 STL 容器的选择取决于它的最终用途。

标签: c++ arrays class pointers struct


【解决方案1】:
private:
        Box *boxPtr 

替换为:

private:
        std::vector<Box> mbox;

它为您节省了所有手动内存管理。而且你出错的可能性更小。
是的,std::vector 可以包含结构作为元素。实际上它是一个模板类,因此它可以存储您想要的任何数据类型。

在 C++ 中,如果您需要动态数组,最简单和最明显的选择是我们std::vector

【讨论】:

  • 我们有足够的信息来推荐矢量吗?
  • @Chubsdad:是的,std::vector&lt;Box&gt; 显然比Box *boxptr; 要好得多,Box *boxptr; 需要按照 Q 所说的那样动态分配。
  • @Chubsdad 不,严格来说我们没有。可能是要求发帖人保证某种运行时独立的二进制兼容性......但事实上,由于他没有提到它,而且他/她的班级似乎没有为此配备,我认为我们可以推荐std::vector :-)
猜你喜欢
  • 2014-03-14
  • 1970-01-01
  • 2013-06-30
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多