我可以用新的分配内存块吗?



所以给定这个c结构:

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

这个答案描述了使用单个malloc同时分配myStruct及其数组:

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 示例一样分配给我在运行时收到的大小。

您可以使用带有 char数组的new 来分配内存块,然后使用放置 new 在该内存块上调用构造函数。

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

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

    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;
}

相关内容

  • 没有找到相关文章

最新更新