简单的提升智能指针语法问题

时间:2012-05-06 18:39:13

标签: c++ boost shared-ptr smart-pointers

使用boost::scoped_ptrboost::shared_ptr时,我收到错误

  

1> * \ algomanager.cpp(28):错误C2064:术语未评估为   函数取1个参数

我有这样的代码。 。 。

class X{
  boost::shared_ptr<cPreFilterProcess> preProcess;
public:
  X(){
    preProcess(new cPreFilterProcess(pars));
  }
};

我错过了什么?感谢。

2 个答案:

答案 0 :(得分:6)

我神秘的玻璃魔法调试告诉我你正在做这样的事情:

class X{
  boost::shared_ptr<cPreFilterProcess> preProcess;
public:
  X(){
    preProcess(new cPreFilterProcess(pars));
  }
};

您需要使用成员初始值设定项,如:

X() : preProcess(...){}

或者使用.reset,因为你不能只指定一个像这样的指针:

X() { preProcess.reset(...); }

我强烈推荐第一个选项。

答案 1 :(得分:3)

如果你只是把它写成一个声明:

preProcess ( new cPreFilterProcess(pars) );

它无效,因为preProcess已经构造,所以语法试图像调用函数一样“调用”它。

这也无效:

preProcess = new cPreFilterProcess(pars);

因为您无法将cPreFilterProcess*分配给shared_ptr<cPreFilterProcess>

也许你的意思是:

preProcess.reset( new cPreFilterProcess(pars) );

preProcess = boost::shared_ptr<cPreFilterProcess>( new cPreFilterProcess(pars) );