考虑这段代码:
int *p = new int;
cout << sizeof(*p);
delete p;
正如预期的那样,结果是 4。现在,考虑其他代码:
int *p = new int[10];
cout << sizeof(*p);
delete[] p;
我希望得到 40(分配的数组的大小),但是结果仍然是 4。
现在,假设我有一个函数 int *foo()
,它返回一个指向使用 new
或使用 new[]
创建的结构的指针>(但我不知道是哪一个):
int *p = foo();
我的问题是,有没有办法(或 hack)知道 p
是指向单个整数还是整数数组?
请记住,这只是一个理论问题。我不会以这种方式编写真正的代码。
最佳答案
不,没有办法做到这一点。但是您知道其中的区别,因为您编写的代码称为new
或new[]
。
顺便说一下原因:
cout << sizeof(*p);
在这两种情况下都给你 4 是因为 p 是一个指向 int 的指针,表达式 *p 表示这样一个指针指向的东西(即 int),而你的平台上 int 的大小是 4。这都是在编译时计算的,所以即使 new[]
确实返回了一个特殊值,sizeof
也无法使用它。
关于c++ - 有没有办法区分 new 和 new[] 的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6229329/