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*)”的调用不匹配
但是,创建tmpshared_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。