用new定义的数组大小?

时间:2013-04-20 16:01:55

标签: c++ arrays new-operator sizeof

是否有一个函数(可以编写),它允许知道用new定义的数组的大小:

  int *a=new int[3];
  *a=4;
  *(a+1)=5;
  *(a+2)=6;  

谢谢!

3 个答案:

答案 0 :(得分:7)

没有一种标准方法可以获得用new分配的数组大小。

更好的数组分配方法是std::vector,它有一个size()成员 - 当它超出范围时会自动清理。

答案 1 :(得分:5)

简短回答:

改为使用std::vector

答案 2 :(得分:1)

可以为此编写一个函数。但在现实世界中,这是一个糟糕的主意。

虽然调用new的行为最有可能存储分配的数组中的元素数(或者至少是它下面实际分配的大小),但是你无法获得信息的方式不依赖于知道new如何在您的特定系统上工作,并且如果您以不同方式编译代码(例如调试或发布版本的代码),则可能会更改,更改编译器的版本(或运行时库等)等。

使用上面提到的std::vector是一种更好的方法,因为您还不必担心在其他地方释放阵列。

如果由于某种原因,您不想[或者您的导师告知您不能]使用std::vector,您需要“记住”分配的大小。