boost :: shared_ptr默认构造导致成员函数消失吗?

时间:2011-11-03 17:27:02

标签: c++ boost

假设我们有一秒

#include <boost/shared_ptr.hpp>
#include <iostream>
int main()
{
   boost::shared_ptr<int> bleah(); //default constructor
   cout << bleah.get() << endl; //error line

   boost::shared_ptr<int> barf(new int (10));
   cout << *barf.get() << endl; //outputs 10 as normal.


}

为什么这不编译? 就好像函数shared_ptr :: get一下子从变量“bleah”的类定义中突然消失了。 我确信这是有原因的,但我现在看不到它。

2 个答案:

答案 0 :(得分:7)

第一个不是shared_ptr,它是一个带零参数的函数,它返回一个名为bleah的shared_ptr,删除()。

答案 1 :(得分:3)

这在C ++中称为 Most vexing Parse

这句话:

boost::shared_ptr<int> bleah(); //default constructor

您声明了一个带零参数的函数,该函数返回名为bleah的shared_ptr。

要创建对象,请将其更改为:

boost::shared_ptr<int> bleah;