boost :: shared_ptr作为数据成员,如何在构造函数中赋值?

时间:2013-11-20 21:46:00

标签: c++ memory-management boost shared-ptr

如果您在类中有一个boost :: shared_ptr数据成员:

class X{
public:

private:
    boost::shared_ptr<Y> a;
};

如何初始化X的构造函数中的指针?我试过这个并不行:

X::X(){
    a(new Y());
}

1 个答案:

答案 0 :(得分:2)

您必须使用成员初始化列表:

X::X()
    : a(new Y())
//  ^^^^^^^^^^^^
{ }

否则a(new Y())被视为对boost::shared_ptr<Y>::operator()(Y*)的调用,其中没有定义(或原型),因此您会收到错误。另一种解决方案是使用赋值:

X::X()
{
    a = new Y(); // or a = boost::make_shared<Y>()
}