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

Why does new keyword return pointer instead of reference?

本文关键字:引用 指针 new 关键字 返回 为什么      更新时间:2023-10-16

我知道返回指针的new关键字,所以返回类型是void*。我愚蠢的问题是,为什么new必须返回void*而不是void&?意味着当new创建对象时,他们可以使用&运算符的地址返回该对象的地址。

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

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]; 

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

此外,new没有提供对其分配的对象进行命名的方法,而是返回一个指向其分配对象的指针。不能将非常量左值引用绑定到未命名的对象。