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

时间:2013-11-05 16:11:43

标签: c++ c malloc new-operator dynamic-memory-allocation

所以给出了这个结构:

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示例一样。

3 个答案:

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