1

所以给定这个结构:

typedef struct {
    int* arr1;
    int* arr2;
} myStruct;

这个答案描述了使用单个malloc来同时分配 amyStruct和它的数组:

myStruct* p = malloc(sizeof(*p) + 10 * sizeof(*p->arr1) + 10 * num * sizeof(*p->arr2);

if(p != NULL) {
    p->arr1 = (int*)(p + 1);
    p->arr2 = p->arr1 + 10;
}

我想知道有没有类似的方法可以做到这一点new
显然,我希望能够分配给我在运行时收到的大小,就像在 C 示例中所做的那样。

4

3 回答 3

7

new您可以使用数组分配一块内存char,然后使用placement new调用该内存块上的构造函数。

于 2013-11-05T16:17:23.650 回答
1

你有什么理由想要像你提供的链接那样做吗?多一点上下文会有所帮助。否则我个人只会使用构造函数来做到这一点:

    struct myStruct {
        int* arr1;
        int* arr2;
        myStruct(int num)
        {
                arr1 = new int[10];
                arr2 = new int[10*num];
        }
        ~myStruct()
        {
                delete[] arr1;
                delete[] arr2;
        }
};

int main()
{
        int num = 3;
        myStruct* a;
        a = new myStruct(3);
        delete a;
}
于 2013-11-05T16:32:28.827 回答
1

在 c++ 中,我们使用new它是因为它调用正在分配的对象的构造函数。因此,实现您想要的正确方法是让结构的构造函数进行必要的分配。

于 2013-11-05T16:15:05.067 回答