我花了很长时间来解决这个问题。所以我很想知道它们之间的区别。以下是代码段:
struct Test
{
Test () { cout<<" Test()\n"; }
~Test () { cout<<"~Test()\n"; }
};
int main()
{
Test obj(); // Remove braces of 'obj' & constructor/destructor are printed
}
想知道,为什么会出现这样的行为?声明具有/不具有空括号的对象之间是否存在任何根本区别(这里我们仅讨论默认构造函数的情况)。代码编译为Ubuntu / g ++的最新版本之一。对不起,这是一个重复的问题。
答案 0 :(得分:2)
Test obj();
声明一个名为obj
的函数,该函数不接受任何参数并返回类型为Test
的对象。它不会使用默认构造函数创建类型为obj
的对象Test
。
答案 1 :(得分:0)
Test obj();
表示声明名为obj()
的函数,其返回类型为Test
。 Statement实际上并没有实例化类Test
。对于要实例化的类 -
Test obj ; // obj is instantiated meaning it's constructor is called and
// destructor is called when gone out of scope.