使用/不使用大括号声明C ++对象之间的区别

时间:2011-03-23 04:22:47

标签: c++

  

可能重复:
  constructor invocation mechanism

我花了很长时间来解决这个问题。所以我很想知道它们之间的区别。以下是代码段:

struct Test
{
  Test () { cout<<" Test()\n"; }
 ~Test () { cout<<"~Test()\n"; }
};
int main()
{
  Test obj(); // Remove braces of 'obj' & constructor/destructor are printed
}

想知道,为什么会出现这样的行为?声明具有/不具有空括号的对象之间是否存在任何根本区别(这里我们仅讨论默认构造函数的情况)。代码编译为Ubuntu / g ++的最新版本之一。对不起,这是一个重复的问题。

2 个答案:

答案 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.