2014-01-15 71 views
0

我必须为其他人编写的某些函数进行谷歌测试,而且我已经有了以前从未有过的情况。请参见下面的伪代码:C++:指针,然后roound括号 - 这是什么意思?

typedef boost::shared_ptr<CSomeClass> CSomeClass_sh_ptr; 
    CSomeClass_sh_ptr getSomething(int A) 
    { 
     if(A>3) 
     { 
      return CSomeClass_sh_ptr(); 
     } 
     CSomeClass_sh_ptr pointerToCSomeClass = otherPointerToCSomeClass; 
     return pointerToCSomeClass; 
    } 

所以我的问题是 - 这是什么

CSomeClass_sh_ptr() 

boost::shared_ptr<CSomeClass>() 

是什么意思?

+0

构造的'升压:: share_ptr '类型 – billz

+0

@billz:那号临时类型。构造函数是一个特殊的函数,它的声明(对于模板类型)看起来不同,并且它必须出现在类范围中。 – MSalters

回答

1

在您的情况下,CSomeClass_sh_ptr()是默认构建的实例CSomeClass_sh_ptr。换句话说,默认构建的boost::shared_ptr<CSomeClass>

请注意,boost::shared_ptr<SomeClass>不是一个指针。它是一种管理指针的类型。当默认构造时,其托管指针为NULL或nullptr

+0

我不确定宣称'_ptr < >'不是指针是否是好教学。 – MSalters

1

您的误解是您认为boost::share_ptr<CSomeClass>是指针,而实际上它是class管理指向CSomeClass的指针,因此boost::share_ptr<CSomeClass>()表示该类的对象的构造。

1

一个类型的名称,后跟一个(),意味着创建一个临时类型,初始化该值。就你的情况而言,正如其他人指出的那样,类型是类模板的实例,因此是一个类。要初始化一个类,就是调用它的默认构造函数(如果它有一个),或者如果它没有构造函数,则将其初始化为零。 (boost::shared_ptr有一个默认的构造函数,所以它被调用)。如果你实际上有一个指针,为了初始化它将会初始化它,这将导致一个空指针。 (的boost::shared_ptr模拟的指针行为这个方面的默认的构造;它的默认构造函数创建一个共享指针,它的行为就像一个空指针)