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

Simple boost smart pointer syntax issue

本文关键字:指针 语法 问题 智能 简单      更新时间:2023-10-16

使用 boost::scoped_ptrboost::shared_ptr时出现错误

1>*\algomanager.cpp(28):错误 C2064:项的计算结果不是 函数采用 1 个参数

我有这样的代码。 。 。

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

我错过了什么?谢谢。

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

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

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

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

或者使用.reset因为你不能像这样分配一个指针:

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

不过,我强烈建议使用第一种选择。

如果你只是把它写成一个语句:

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) );