我可以用新的内存分配一块内存吗?
所以考虑到这个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; }
我想知道有没有类似的方法来做到这一点?
显然,我希望能够分配到我在运行时收到的大小,就像使用C示例一样。
您可以使用带有char
数组的new
分配内存块,然后使用placement 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; }