此代码的行为与我的预期不符。
#include<iostream>
using namespace std;
class Class
{
Class()
{
cout<<"default constructor called";
}
~Class()
{
cout<<"destrutor called";
}
};
int main()
{
Class object();
}
我期望输出'默认构造函数',但我没有看到任何输出。有什么问题?
答案 0 :(得分:33)
不。你的行Class object();
声明了一个函数。你要写的是Class object;
尝试一下。
您可能也对最令人烦恼的解析感兴趣(正如其他人所说)。一个很好的例子是在第33页的Effective STL第6项中。(在第12次打印中,2009年9月。)具体来说,第35页顶部的示例是您所做的,它解释了为什么解析器将其作为函数处理声明。
答案 1 :(得分:17)
无需调用构造函数
因为实际上永远不会调用构造函数。
Class object();
被解释为函数object
的声明,它不接受任何参数并返回Class
的对象[按值]
尝试Class object;
修改强>:
正如迈克注意到的那样,这与您为编译器提供的代码并不完全相同。构造函数/析构函数public
或Class
是结构吗?
然而google for C ++最令人烦恼的解析。
答案 2 :(得分:0)
你可以像这样使用它:
Class obj;
//or
Class *obj = new Class(/*constructor arguments*/);