在另一个类的构造函数中创建一个动态的对象数组

时间:2017-04-12 15:04:28

标签: c++ arrays class constructor

我头疼。以下代码片段是对的吗?我想创建一个包含19个B对象的数组,其中包含另一个X A对象数组。 (X是可变的,我的意思是As数组在B对象之间的长度可能不同)

稍后我想说B_obj[i].As[j].number = 0; (i = [0-18],j = [0 - 取决于对象])

示例:

class A
{
    public:
        A();

    private:
        char *arena;
        size_t size;
        int number;
};

A::A()
{
    size = 5;

    arena= (char *) malloc (size);

   ... some code ...
}

class B
{
    private:
        int counter;
        A* As;

    public:
        B();
};

B::B()
{
    counter = getMyNumber(); /* getMyNumber returns an individual ID */
    As= (A*) malloc(counter * sizeof(A)));
}

B B_obj[19];

内存是否正确分配?一切都必须设置,我不允许以后分配额外的内存。

1 个答案:

答案 0 :(得分:0)

  

我想创建一个包含19个B对象的数组,其中包含另一个X A对象数组。

class B {
    std::vector<A> x;
public:
    // your public interface here
};

B arr[19];

当您使用std::vector等优质RAII解决方案时,解决方案变得非常简单,因为它可以为您进行内存管理。内存是自动分配的,您可以使用std::vector::reserve在向量中分配一定数量的A个对象。