【发布时间】:2015-07-05 03:28:16
【问题描述】:
我知道new 关键字返回指针,所以返回类型是void*。我愚蠢的问题是,为什么 new 必须返回 void* 而不是 void& ?意味着当new创建对象时,他们可以使用&操作符的地址返回该对象的地址。
我知道指针和引用之间的区别。但最后我们使用指针而不是引用。请解开我的困惑谢谢。
【问题讨论】:
-
如果
new返回void *,那么int *p = new int;将无法编译。这假设您指的是语言new而不是<new>中的内容。 -
因为引用不是含糖的指针,它们是别名。
-
请在此处阅读 operator new 和 new operator 之间的区别stackoverflow.com/questions/16345340/does-new-return-void-in-c
-
不是一个答案,因为我没有任何好的证据,但我对它为什么是指针而不是引用的理解是:1) C++ 在首次创建时没有异常。因此,如果您未能分配内存,则表明失败的方式是返回 null。你不能用引用来做到这一点。 2) 顺便说一句,C++ 在首次创建时也没有引用,所以无论如何也不可能。 3) 即使有异常和引用,仍然有
new的重载明确无异常,在这些情况下使用null 表示失败。 -
为了向后兼容。他们一直在改进 C++,但没有改变它。旧代码应该可以工作。此外,您可以使用
new创建的内容delete,但是您将引用一个不存在的对象,这是非法的。