所以给定这个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;
}