如果你有一个名为'Rock'的课程,你可以这样做: -
int main()
{
Rock;
}
为什么你得到“声明没有声明任何内容”错误?
它不应该只调用默认构造函数并在那一刻创建对象吗?
当然,我将无法使用该对象,当它超出函数范围时会被销毁,但为什么不创建它呢?
在java等其他编程语言中,变量不是强制性的。你可以做一些像 new Rock()这样的事情,你会没事的。
我知道这没什么用,但我想清除我的困惑。
答案 0 :(得分:5)
Rock
只是班级的名称。没有声明变量名称。要调用构造函数/创建对象,您需要声明变量的名称:Rock r;
这会在堆栈上创建一个对象,当它超出范围时会被销毁
答案 1 :(得分:1)
Rock;
此实例化代码错误。
如果必须调用默认构造函数,则必须按如下方式命名对象。
Rock rd;
在C ++中Rock
是一种自定义类型。
因此,要定义Rock类型的变量,您必须遵循以下语法
Typename variableName
答案 2 :(得分:1)
在Java中,调用new Rock();
将创建一个临时对象,可能会立即收集垃圾,因为它没有绑定到引用。
在C ++中,您可以使用Rock{};
执行相同的操作,但现在您可以保证对象将立即被销毁
答案 3 :(得分:0)
如果要调用构造函数,请使用
Rock( )
虽然我不太了解你在这里尝试做什么。 你基本上只是说明没有实际对象的类型。
Rock *someRock = new Rock( );
在C ++中是合法的,它在堆上而不是在堆栈上创建一个对象。
(注意,一旦delete someRock;
不再需要该对象,你必须释放内存。)
答案 4 :(得分:0)
你可以这样做:
Rock();
但是那个目标是什么?
答案 5 :(得分:0)
要使这个声明或表达具有两个可能性。第一个确实是宣言
int main()
{
class Rock;
}
此声明在函数main的范围内声明(或重新声明)类Rock。
第二个创建类的临时对象,调用其默认构造函数
int main()
{
Rock();
}
使用函数调用语法调用构造函数。
考虑到在C ++中你也可以使用operator new。但是,应将操作符返回的值分配给指针。否则会有内存泄漏。 C ++没有垃圾收集器。
所以
的内容new Rock();
你应该写
Rock *r = new Rock();
或者您甚至可以通过以下方式重新声明名称Rock
Rock *Rock = new class Rock();