※ ChatGPTを利用し、要約された質問です(原文:多次元配列の new 2)
多次元配列のnew2
追加の質問ですみません^^;
char の8個の配列へのポインタの配列を new する場合などは、以下のサンプルのように typedef しないとかけないんでしょうかね?たとえば、
char (**bb)[8] = new (char (*)[8])[8];
書きたいように思いますが、これは文法違反ですし・・・^^;
==== サンプル:(iostream の初期化時に、定義した new が呼び出されるかもしれないことを一応考慮して、stdio の関数を使っています^^)
#include <new>
#include <stdlib.h>
#include <stdio.h>
void *operator new(std::size_t s) {
void *p = malloc(s);
fprintf(stderr, "::new(): %p\t%lu\n", p, (unsigned long)s);
return p;
}
void operator delete(void *p) {
fprintf(stderr, "::delete(): %p\n", p);
if (p) free(p);
}
void *operator new[](std::size_t s) {
void *p = malloc(s);
fprintf(stderr, "::new[](): %p\t%lu\n", p, (unsigned long)s);
return p;
}
void operator delete[](void *p) {
fprintf(stderr, "::delete[](): %p\n", p);
if (p) free(p);
}
int main()
{
typedef char (*T)[8];
char (**b)[8] = new T[8];
delete[] b;
}
====
% ./a.exe
::new[](): 0x6e01b0 32
::delete[](): 0x6e01b0
お礼
あっ、なるほど。全体を括弧でくくらないとダメなんですね^^ ありがとうございました。
補足
それに、 char (**bb)[8] = new (char (*)[8])[8]; は、型指定が間違ってましたね^^; 意味的に、 char (**bb)[8] = new char(*[8])[8]; でした。 わたしの場合、素直に typedef するのがよさそうです(笑)