1

したがって、次構造が与えられます。

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

この回答では、シングルを使用してaとその配列を同時に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 の例で行ったように、実行時に受け取るサイズに割り当てられるようにしたいと考えています。

4

3 に答える 3

7

newの配列を使用してメモリ ブロックを割り当ててから、 placement newcharを使用して、そのメモリ ブロックのコンストラクタを呼び出すことができます。

于 2013-11-05T16:17:23.650 に答える
1

あなたが提供したリンクのようにそれをしたい理由はありますか? もう少しコンテキストが役立ちます。それ以外の場合は、個人的にコンストラクターを使用してそれを行います。

    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;
}
于 2013-11-05T16:32:28.827 に答える
1

c++ ではnew、割り当てられるオブジェクトのコンストラクターを呼び出すため、使用します。したがって、目的を達成するための適切な方法は、構造体のコンストラクターに必要な割り当てを行わせることです。

于 2013-11-05T16:15:05.067 に答える