我知道返回指针的new
关键字,因此返回类型为void*
。我的愚蠢问题是为什么new
必须返回void*
而不是void&
?表示new
创建的对象可以使用&
运算符的地址返回该对象的地址。
我知道指针和引用之间的区别。但最后我们使用指针而不是引用。请清除我的困惑谢谢。
答案 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
无法命名它分配的对象,而是返回指向它分配的对象的指针。您不能将非常量左值引用绑定到未命名的对象。