gpt4 book ai didi

c++ - 为什么我们不能像在java中那样使用new ClassName(),而是使用new ClassName呢?

转载 作者:行者123 更新时间:2023-11-28 04:45:11 27 4
gpt4 key购买 nike

我想知道 c++ 和 java 都使用 oops 概念,但语法却大不相同。

我发现 java 使用 new ClassName() 来获取对堆的引用,但获取对堆的相同引用为什么 c++ 使用 new ClassName。

 #include<iostream>
using namespace std;

class Bike
{
public:
virtual void run()
{
cout << "running";
}
};

class Splender :public Bike
{
public:
void run()
{
cout << "running safely with 60km";
}
};

int main()
{
Bike &obj = new Splender();//error but reason?
obj.run();
}

错误: 从“Splender*”类型的右值初始化“Bike&”类型的非常量引用无效

最佳答案

两件事。一:运算符 new 返回指向对象实例的指针,而不是引用。所以使用 Bike* obj = new Splender();

二:不要变得可爱并尝试 Bike& obj = *new Splender(); 因为 new 可以在内存不足的情况下返回 nullptr 如果你取消引用它,你的程序会在那个时候崩溃。 (而且你被迫使用丑陋的 delete *obj; 来清理这个对象,正如 user4581301 在评论中指出的那样。)

哦,而且 using namespace std 是一种不好的做法。在您使用标准库的地方添加 std:: 不会杀死您。

关于c++ - 为什么我们不能像在java中那样使用new ClassName(),而是使用new ClassName呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49390169/

27 4 0