c++ - 有没有办法区分 new 和 new[] 的返回值?

标签 c++ dynamic-memory-allocation dynamic-arrays

考虑这段代码:

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 是指向单个整数还是整数数组?

请记住,这只是一个理论问题。我不会以这种方式编写真正的代码。

最佳答案

不,没有办法做到这一点。但是知道其中的区别,因为您编写的代码称为newnew[]

顺便说一下原因:

 cout << sizeof(*p);

在这两种情况下都给你 4 是因为 p 是一个指向 int 的指针,表达式 *p 表示这样一个指针指向的东西(即 int),而你的平台上 int 的大小是 4。这都是在编译时计算的,所以即使 new[] 确实返回了一个特殊值,sizeof 也无法使用它。

关于c++ - 有没有办法区分 new 和 new[] 的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6229329/

相关文章:

javascript - Array.every 返回 false 而不是 true

c++ - 代码可以用 clang 编译,但不能用 gcc 编译

c++ - 如何在 Linux 中配置和设置谷歌测试框架

c++ - Qt,执行步骤 "Make"时出错

c++ - Linux 真的分配了它不应该在 C++ 代码中的内存

c++ - 如何编写适用于两个动态数组的 strcat 函数

delphi - Delphi 中的 TStringList、动态数组还是链接列表?

c++ - 在 C++ 中创建环境对象的最佳方法

c - 使用指向结构的指针数组期间出现段错误

c++ - 了解具有动态内存分配的二维数组