所以给出了这个c结构:
typedef struct {
int* arr1;
int* arr2;
} myStruct;
This answer使用单个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示例一样。
答案 0 :(得分:7)
您可以使用new
使用char
数组分配一块内存,然后使用placement new来调用该内存块上的构造函数。
答案 1 :(得分:0)
在c ++中我们使用new
因为它调用了被分配对象的构造函数。因此,实现所需内容的正确方法是让结构的构造函数执行必要的分配。
答案 2 :(得分:0)
您是否有任何理由想要这样做,就像您提供的链接一样?更多的背景会有所帮助。否则我个人只会使用构造函数来做到这一点:
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;
}