为什么new关键字返回指针而不是引用?

时间:2015-07-05 03:28:16

标签: c++ pointers

我知道返回指针的new关键字,因此返回类型为void*。我的愚蠢问题是为什么new必须返回void*而不是void&?表示new创建的对象可以使用&运算符的地址返回该对象的地址。

我知道指针和引用之间的区别。但最后我们使用指针而不是引用。请清除我的困惑谢谢。

2 个答案:

答案 0 :(得分:5)

New返回一个指针,指向用于在内存中分配空间的任何类型,而不是void *

 auto p1 = new int[5];   // returns a pointer to an int pointing to the 1st element
 auto p2 = new short[5]; // returns a pointer to a short pointing to the 1st element

参考只能分配一次,裸指针可以多次分配。您可以删除内存并分配更多内存并将其分配给同一指针。这是主要的区别。

delete[] p1;
p1 = new int[20]; 

答案 1 :(得分:3)

我相信new会返回一个指针,因为它比引用更灵活,我认为这与向旧版C ++和C代码的向后兼容性有很大关系NULL用于表示分配失败。而将非const引用设置为null是无效的。

同样new无法命名它分配的对象,而是返回指向它分配的对象的指针。您不能将非常量左值引用绑定到未命名的对象。