C++ boost shared_ptr初始化为类成员

C++ boost shared_ptr初始化为类成员,c++,boost,shared-ptr,intel-edison,C++,Boost,Shared Ptr,Intel Edison,当一个boost::shared_ptr是类的成员变量时,我在初始化它时遇到问题。我看到了前一个问题: 但是,我仍然有一个编译器错误。快速示例代码: class A { public: A(); }; class B { public: B(); private: boost::shared_ptr<A> mA; foo() { // the line below gene

当一个
boost::shared_ptr
是类的成员变量时,我在初始化它时遇到问题。我看到了前一个问题:

但是,我仍然有一个编译器错误。快速示例代码:

class A
{
    public:
      A();
};

class B
{
    public:
       B();
    private:
        boost::shared_ptr<A> mA;

        foo() {

           // the line below generates a compiler error
           mA(new A());       // ERROR

           // below will work....
           boost::shared_ptr<A> tmp(new A());    //OK
           mA = tmp;

        }
 };
A类
{
公众:
A();
};
B类
{
公众:
B();
私人:
boost::共享的\u ptr mA;
foo(){
//下一行生成编译器错误
mA(新的A());//错误
//以下将起作用。。。。
boost::shared_ptr tmp(新的A());//确定
mA=tmp;
}
};
编译器抱怨:
错误:对“(boost::shared_ptr)(A*)”的调用不匹配

但是,创建tmp
shared_ptr
,然后将其分配给
mA
可以很好地编译。我在Ubuntu 14.04机器上为英特尔爱迪生交叉编译


我缺少什么?

您正在寻找
mA.reset(新的A())


共享指针现在也是标准的一部分,所以您应该使用它。谢谢切换到std::shared_ptr也使用构造函数初始值设定项列表-
foo():mA(new A(){…}
foo():mA(boost::make_shared()){…}
这与
shared_ptr
无关,如果
mA
int
那么你在尝试
mA(0)时也会遇到同样的问题
在构造函数主体中。在构造函数主体启动时,成员已经初始化,因此您需要更早地初始化它们(在mem初始值设定项列表中),或者在主体中分配给它们。得到一本关于C++的好书,我不同意。如果mA是一个int,我会使用mem初始值设定项列表,或者在构造函数体中设置它,mA=2或者其他什么。我之所以发布这个问题,是因为我不知道如何初始化共享\u ptr。